SQL Server nicht verwenden, meine index

Habe ich eine relativ einfache Abfrage:

SELECT
     col1,
     col2
FROM
     dbo.My_Table
WHERE
     col1 = @col1 AND
     col2 = @col2 AND
     col3 <= @col3

Es wurde die Durchführung entsetzlich, so dass ich fügte hinzu, ein index über col1, col2, col3 (int, bit, und datetime). Wenn ich überprüft die Abfrage-plan wurde ignoriert meine index. Ich habe versucht, Neuanordnung der Spalten im index in jeder möglichen Konfiguration und es immer ignoriert den index. Wenn ich die Abfrage ausführen, es macht einen clustered-index-scan (Tabellen-Größe ist zwischen 700K und 800K Zeilen) und dauert 10-12 Sekunden. Wenn ich es erzwingen, um meine index gibt es sofort. Ich war vorsichtig und löschen Sie den cache und-Puffer zwischen den tests.

Andere Dinge, die ich versucht habe:

UPDATE STATISTICS dbo.My_Table

CREATE STATISTICS tmp_stats ON dbo.My_Table (col1, col2, col3) WITH FULLSCAN

Bin ich etwas fehlt hier? Ich hasse es, um ein index-Hinweis in einer gespeicherten Prozedur, SQL-Server kann einfach nicht scheinen, um eine Ahnung auf diese. Wer weiß, andere Dinge, die möglicherweise verhindern, dass SQL Server von der Erkenntnis, dass die Verwendung des index ist eine gute Idee?

EDIT: Einer der Spalten, die zurückgegeben wird, eine Spalte TEXT, so mit einem abdeckenden index oder ein INCLUDE funktioniert nicht 🙁

  • Sie stellen eine Ellipse in die Spalte der Liste, welche anderen Spalten sind Sie bei der Auswahl? Was ist, wenn es nur war, col1, col2 und col3?
  • Chris, guter Punkt, aber "Wenn ich die Kraft, es zu verwenden, meinem index, es gibt sofort" Abdeckungen.
  • Die Ellipsen sind, weil die Abfrage gibt alle Spalten in der Tabelle. Ich glaube, ich hätte mit SELECT *
InformationsquelleAutor Tom H | 2009-07-09
Schreibe einen Kommentar