天天看點

SQL Server Execpt和not in 性能差別

網上有很多 except 和 not in的傳回結果差別這裡就就提了。

主要講 except 和 not in 的性能上的差別。

<a></a>

執行計劃:

SQL Server 執行時間:

CPU 時間 = 0 毫秒,占用時間 = 0 毫秒。

(500 行受影響)

表 'tb1'。掃描計數 1,邏輯讀取 2 次,實體讀取 0 次,預讀 0 次,lob 邏輯讀取 0 次,lob 實體讀取 0 次,lob 預讀 0 次。

表 'tb2'。掃描計數 1,邏輯讀取 1 次,實體讀取 0 次,預讀 0 次,lob 邏輯讀取 0 次,lob 實體讀取 0 次,lob 預讀 0 次。

(6 行受影響)

(1 行受影響)

CPU 時間 = 0 毫秒,占用時間 = 528 毫秒。

表 'Worktable'。掃描計數 0,邏輯讀取 0 次,實體讀取 0 次,預讀 0 次,lob 邏輯讀取 0 次,lob 實體讀取 0 次,lob 預讀 0 次。

表 'tb2'。掃描計數 3,邏輯讀取 1002 次,實體讀取 0 次,預讀 0 次,lob 邏輯讀取 0 次,lob 實體讀取 0 次,lob 預讀 0 次。

(10 行受影響)

CPU 時間 = 16 毫秒,占用時間 = 498 毫秒。

結論:通過較多資料 和 較少資料的測試,在較少資料的情況下 not in 比 except 性能好,但是在較多資料情況下 execpt 比 not in 出色。

        看執行計劃可以得知 如何 在 tb1 和tb2 上建立索引,那麼except 的執行計劃開可以得到優化。

如果大家有興趣可以看看 not exists 的執行計劃。建議:

大家不要迷信測試結果,因為所有的性能都是和執行計劃密切相關的。而執行計劃和統計資料又密不可分。

是以過度的迷信測試結果,可能會對生産庫造成性能的影響達不到預期的性能效果。

    本文轉自 Fanr_Zh 部落格園部落格,原文連結:http://www.cnblogs.com/Amaranthus/archive/2012/01/16/2323606.html,如需轉載請自行聯系原作者