我有一個包含主鍵和兩個外鍵的表,其中都允許NULLS。OR子句中存在的索引列
當我爲每兩列分別創建索引時,查詢運行約2-3秒並返回約300000行。
當我爲這兩列創建複合非聚簇索引時,對於相同行數的查詢運行大約10分鐘。
重要的是要注意到,兩列出現在WHERE條件是重要的,使用OR子句的工作方式,是這樣的:在其中執行查詢
Select
SomeColumn
From
SomeTable
Where
FirstColumn = x OR SecondColumn = x
平臺是SQL 2008 R2。
爲什麼在這兩種情況下執行時間有這樣的差異?
聚集索引不是合成的,它包含一個列,它是表的標識列,因此是主鍵。其他兩列分別創建兩個索引,或者分別創建一個組合索引,並且這兩列是WHERE過濾器中的那些列。 – veljasije
向我們展示了執行計劃,我的猜測是其中一個非聚集索引從未被使用,並且在複合索引中,您選擇了錯誤的列作爲第一個列,合成索引中第一列的數據選擇性是多少 - argh,sry for混亂。無法編輯它 – WKordos