Ich bin mir nicht sicher, ob ich hier etwas falsch machen, aber ich habe eine Abfrage auf einem Tisch mit Millionen von Zeilen ausgeführt.Wählen Sie Abfrage zu langsam, obwohl ich einen Index verwenden
Die Abfrage ist so etwas wie dieses:
select *
from dbo.table with (index (index_1), nolock)
where col1 = 15464
and col2 not in ('X', 'U')
and col3 is null
and col4 = 'E'
Index wie folgt aussieht:
CREATE NONCLUSTERED INDEX [index_1] ON [dbo].[table] ([col1], [col2], [col3], [col4]) WITH (FILLFACTOR=90) ON [PRIMARY]
GO
Diese wählen Sie noch eine Minute dauert zu überfahren. Was vermisse ich?
Seien Sie vorsichtig mit diesem NOLOCK Hinweis. Es kann in Ihrer Situation in Ordnung sein, aber die meisten Leute verstehen nicht wirklich alle Verzweigungen dieses Hinweises. http://blogs.sqlsentry.com/aaronbertrand/bad-habits-nolock-everywhere/ –
Versuchen Sie, Composite-Index auf col1, col4 setzen. Schreibe wo, wie col1, dann col4, dann den Rest. –
spielt die Reihenfolge der Where-Klausel eine Rolle, wenn die Indexreihenfolge korrekt ist? –