如果我不得不猜测我会说这是因为查询1是从两个表中拉数据。查询2和3(同时aprox)只是拉取TabA的数据。你可以检查此
的一种方法是通过运行以下:
SET STATISTICS TIME ON
SET STATISTICS IO ON
当我跑
SELECT * FROM sys.objects
我看到下面的结果。
SQL Server parse and compile time:
CPU time = 0 ms, elapsed time = 104 ms.
(242 row(s) affected)
Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'sysschobjs'. Scan count 1, logical reads 10, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'syssingleobjrefs'. Scan count 1, logical reads 2, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'syspalnames'. Scan count 1, logical reads 2, physical reads 1, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 866 ms.
您可以查看每个查询的扫描次数,逻辑读取次数和物理读取次数。物理读取当然需要更长的时间,并代表从磁盘读取到缓存中。如果你所有的读取都是逻辑读取,那么你的表格完全在缓存中。
我愿意,如果你看看你会看到塔布上查询1比更大量的逻辑读取下注2和3
编辑:
只是出于好奇,我做一些测试和博客结果here。
为什么会有'C#'标记?这是无关紧要的。 – 2013-05-02 14:01:20
你是否多次运行这些计时?查询性能受到表格是否加载到页面缓存中的影响很大。 – 2013-05-02 14:03:24
请注意缓存。你是否在每次查询后清理它? – 2013-05-02 14:03:47