今天帮同事写一条简单的SQL,要求是,查出用户所购买过相同书的用户,之后我于同时各写了一条SQL,一个用到表连接中最少耗性能的 inner join,和我没用 inner join 的各一条简单的SQL,其性能相差1倍,而 inner join 又是表连接中最少消耗的,其他的可以想象。

SET STATISTICS TIME ON
SET STATISTICS IO ON
SET STATISTICS PROFILE ON

CHECKPOINT
DBCC DROPCLEANBUFFERS
DBCC FREEPROCCACHE
DBCC FREESYSTEMCACHE ( 'ALL' )
SELECT COUNT(A) FROM (SELECT COUNT([NewsID]) AS A
FROM [BoocaaDB].[dbo].[c_OrderTable]
WHERE [UserID] = '*******@163.com' OR [UserID] = '******@QQ.com'
GROUP BY [NewsID]) AS T1 WHERE A = 2        --没用到 表连接

CHECKPOINT
DBCC DROPCLEANBUFFERS
DBCC FREEPROCCACHE
DBCC FREESYSTEMCACHE ( 'ALL' )
SELECT COUNT(ot1.NewsID) AS RESULT FROM c_OrderTable AS ot1
INNER JOIN c_OrderTable AS ot2 ON ot1.NewsID = ot2.NewsID          -- inner join
WHERE ot1.UserID = '******@163.com' AND ot2.UserID = '*******@qq.com'
使用 inner join 消耗 63% 之前在同事电脑上测出来的是32%与68%之后,回我电脑上增加数据,再测试为以下结果




以上结果不代表绝对正确,如有误欢迎高手纠正

作者: Dreamer57 发表于 2011-07-04 11:58 原文链接

推荐.NET配套的通用数据层ORM框架:CYQ.Data 通用数据层框架