2013-07-10 25 views
0

我有以下問題:SQL Server 2005中 - 選擇性能 - WHERE和NULL

SQL Server 2005中

  • 表:文件
  • 記錄:400,000
  • 字段值不INDEX
  • 查詢:

    SELECT * FROM Documents WHERE value = 0 
    

例A:

  • ALL 400,000記錄有值= NULL
  • 性能= X秒

CASE B:

  • 200,000記錄有值= NULL
  • 200'000條記錄有價值<> NULL
  • 性能= X + Y秒

CASE C:

  • 400,000記錄有值<> NULL
  • 性能= X + Y + Z秒

這是一種常見行爲,還是我必須在其他地方搜索績效度的原因?

+2

運行'SET STATISTICS IO ON; SET STATISTICS TIME ON;'並且發佈案件的輸出而不是字母表的字母。 –

+0

這樣做有點困難,因爲它是我無法訪問的生產數據庫。假設性能下降30%。 –

回答

1

你幾乎可以肯定沒有value列的索引。鑑於這種假設,你的結果並不令人驚訝。 NULL在內部存儲爲一個單獨的位,比查找(和拒絕)更容易執行數字比較。

如果你有一個索引,那麼我會對這些結果感到有點驚訝。如果您發佈有關表格的精確數字(列寬),以及您看到的結果而不是「X,Y和Z」,這也會有所幫助。和往常一樣,當檢查性能問題看看查詢計劃