2017-07-20 66 views
2

我的表有一個非聚集索引:IX_columnA_columnBSQL服務器 - 謂語和在同一列尋求謂語

CREATE INDEX IX_columnA_columnB ON table (columnA, columnB) 
    INCLUDE (xxx) 

我的查詢有兩個columnAcolumnB 在執行計劃,對優化器使用seek predicate過濾器他們兩個,但我看到columnB再次出現在predicate 我不知道這種情況。任何人都可以幫忙?非常感謝

+0

殘餘斷言對於這種類型的問題被丟棄,如果您發佈使用查詢和執行計劃以XML和表定義。那將是很多有益 – TheGameiswar

+0

@MartinSmith:你能不能請刪除我的問題嗎?我試圖刪除它,但沒有成功,然後我更新了它。謝謝 –

+1

明白了,非常感謝 –

回答

2

你的查詢謂詞是一樣的東西

recommend Between 179764 and 26506209 and winlostdate >= '2017-07-12' 

該指數是邏輯順序如下。

+-----------+-------------+------+----------+ 
| recommend | winlostdate | Seek | Residual | 
+-----------+-------------+------+----------+ 
| 179764 | 2000-01-01 |  |   | 
| 179764 | 2017-07-12 | Y | Y  | 
| 179765 | 2000-01-01 | Y | N  | 
| 179765 | 2017-07-12 | Y | Y  | 
| 26506209 | 2000-01-01 | Y | N  | 
| 26506209 | 2017-07-12 | Y | Y  | 
| 26506210 | 2000-01-01 |  |   | 
+-----------+-------------+------+----------+ 

跳軌謂詞的(recommend, winlostdate) >= (179764, '2017-07-12')開始謂語,直到達到終止條件和recommend <= 26506209是不正確讀取順序與索引。

這是Seek = Y之上的連續範圍。

但是,該範圍包括兩行,不匹配所有謂詞。這些都是通過winlostdate >= '2017-07-12'