如果我不得不猜測我會說這是因爲查詢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