2017-07-20 6 views
2

Meine Tabelle hat einen nicht gruppierten Index: IX_columnA_columnBSQL Server - Prädikat and Seek Prädikat auf derselben Spalte

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

Meine Anfrage hat Filter sowohl columnA und columnB auf Ausführungsplan, der Einsatz Optimierer seek predicate auf beide, aber ich sehe columnB erscheint wieder in predicate Ich kenne diesen Fall nicht. Jeder kann helfen? Vielen Dank

+0

für diese Art von Fragen verworfen, wenn Sie Abfrage verwendet und Ausführungsplan als xml-und Tabellendefinitionen. Das wird eine Menge hilfreich sein – TheGameiswar

+0

@MartinSmith: Könnten Sie bitte meine Frage löschen? Ich habe versucht, es zu löschen, aber nicht erfolgreich, dann habe ich es aktualisiert. Danke –

+1

habe es, vielen Dank –

Antwort

2

Ihre Anfrage Prädikat ist so etwas wie

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

Der Index logisch wie folgt bestellt wird.

+-----------+-------------+------+----------+ 
| 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 |  |   | 
+-----------+-------------+------+----------+ 

Das Prädikat suchen hat einen Start Prädikat (recommend, winlostdate) >= (179764, '2017-07-12') und liest den Index um bis der Endzustand erreicht ist und recommend <= 26506209 ist nicht wahr.

Dies ist der zusammenhängende Bereich, in dem Seek = Y ist.

Dieser Bereich enthält jedoch zwei Zeilen, die nicht mit dem Prädikat übereinstimmen. Diese werden durch das Prädikat Rest auf winlostdate >= '2017-07-12'