可疑的性能這是在一個存儲過程..這if語句,然後我做一些工作。 @AsOfDate是傳入的變量日期數據類型。我的問題是爲什麼我通過刪除最內部存在的方式來獲得更好的性能,但只有當整個語句處於IF EXISTS?使用IF EXISTS與內部存在檢查
兩個表:
- dbo.TXXX_InventoryDetail - 1.3十億records..stats最新
- dbo.TXXX_InventoryFull - 980萬個records..stats最新
聲明:
if exists (select 1
from dbo.TXXX_InventoryDetail o
where exists (select 1
from dbo.TXXX_InventoryFull i
where i.C001_AsOfDate= o.C001_AsOfDate
and i.C001_ProductID=o.C001_ProductID
and i.C001_StoreNumber=o.C001_StoreNumber
and [email protected]
and (i.C001_LastModelDate!=o.C001_LastModelDate
or o.C001_InventoryQty!=o.C001_InventoryQty
or i.C001_OnOrderQty!=o.C001_OnOrderQty
or i.C001_TBOQty!=o.C001_TBOQty
or i.C001_ModelQty!=o.C001_ModelQty
or i.C001_TBOAdjustQty!=o.C001_TBOAdjustQty
or i.C001_ReturnQtyPending!=o.C001_ReturnQtyPending
or i.C001_ReturnQtyInProcess!=o.C001_ReturnQtyInProcess
or i.C001_ReturnQtyDueOut!=o.C001_ReturnQtyDueOut))
and [email protected])
IO輸出:
- 表'TXXX_InventoryFull'。掃描計數9240262,邏輯讀取29548864
- 表'T001_InventoryDetail'。掃描計數1,邏輯讀取17259
如果我刪除了其中存在第二,做一個連接:
if exists (select 1
from dbo.TXXX_InventoryDetail o,
dbo.TXXX_InventoryFull i
where i.C001_AsOfDate= o.C001_AsOfDate
and i.C001_ProductID=o.C001_ProductID
and i.C001_StoreNumber=o.C001_StoreNumber
and [email protected]
and (i.C001_LastModelDate!=o.C001_LastModelDate
or o.C001_InventoryQty!=o.C001_InventoryQty
or i.C001_OnOrderQty!=o.C001_OnOrderQty
or i.C001_TBOQty!=o.C001_TBOQty
or i.C001_ModelQty!=o.C001_ModelQty
or i.C001_TBOAdjustQty!=o.C001_TBOAdjustQty
or i.C001_ReturnQtyPending!=o.C001_ReturnQtyPending
or i.C001_ReturnQtyInProcess!=o.C001_ReturnQtyInProcess
or i.C001_ReturnQtyDueOut!=o.C001_ReturnQtyDueOut)
and [email protected])
IO輸出:
- 表 'TXXX_InventoryDetail'。掃描計數0,邏輯讀取333952
- 表'TXXX_InventoryFull'。掃描計數1,邏輯讀取630
Now..the原因,我認爲這是是否存在是,如果我刪除它,做一個SELECT COUNT(*)這樣的:
select COUNT(*)
from dbo.T001_InventoryDetail o
where exists (select 1
from dbo.TXXX_InventoryFull i
where i.C001_AsOfDate= o.C001_AsOfDate
and i.C001_ProductID=o.C001_ProductID
and i.C001_StoreNumber=o.C001_StoreNumber
and [email protected]
and (i.C001_LastModelDate!=o.C001_LastModelDate
or o.C001_InventoryQty!=o.C001_InventoryQty
or i.C001_OnOrderQty!=o.C001_OnOrderQty
or i.C001_TBOQty!=o.C001_TBOQty
or i.C001_ModelQty!=o.C001_ModelQty
or i.C001_TBOAdjustQty!=o.C001_TBOAdjustQty
or i.C001_ReturnQtyPending!=o.C001_ReturnQtyPending
or i.C001_ReturnQtyInProcess!=o.C001_ReturnQtyInProcess
or i.C001_ReturnQtyDueOut!=o.C001_ReturnQtyDueOut))
and [email protected]
- TXXX_InventoryFull'。掃描計數41,邏輯讀取692
- T001_InventoryDetail'。掃描計數65,邏輯讀取17477
- 工作臺'。掃描計數0,邏輯讀取0
那CPU呢? – gbn 2011-04-21 13:48:55