Ich bin ein Begginer. Ich weiß, dass Indizes für Leistungssteigerungen notwendig sind, aber ich möchte wissen, wie sie hinter den Kulissen funktionieren. Zuvor habe ich zu denken, dass wir auf diesen Spalten machen Indizes sollten, die in enthalten sind, where-Klausel (die ich falsch realisiert ist)Wie arbeiten Indizes hinter den Kulissen
Zum Beispiel SELECT * from MARKS where marks_obtained > 50
Bedenken Sie, dass es auf Primärschlüssel dies ein Clustered-Index ist Tabelle und ich habe einen nicht geclusterten Index auf Marks_Obtained Spalte als seine dort in meiner WHERE-Klausel erstellt.
Meine Wahrnehmung: So sind die Blattknoten enthält Zeiger zu Clustered-Index und als gruppierten Indexpunkte auf tatsächlichen Zeilen werden, wird es ganze Zeilen (aufgrund asteric in meiner Anfrage) wählen
Szenario
stieß ich auf Abfrage folgende (von Adventure DB, auf dem ein nicht gruppierten Index erstellt wurde), der gut arbeitet und dauerte weniger als eine zweite3200000 Reihen auszuführen, bis eine neue Spalte in sie eingefügt wurde:
Abfrage
SELECT x.*
INTO#X
FROM dbo.bigProduct AS p
CROSS APPLY
(
SELECT TOP 1000 *
FROM dbo.bigTransactionHistory AS bth
WHERE
bth.ProductId = p.bth.ProductId
ORDER BY
TransactionDate DESC
) AS x
WHERE
p.ProductId BETWEEN 1000 AND 7500
GO
NEW eingefügte Spalte
ALTER TABLE dbo.bigTransactionHistory
ADD CustomerId INT NULL
Nach dem Einsetzen von oben Spalte es 17 Sekunden nahm! bedeutet 17 mal langsamer. Ein nicht verklammerter Index fehlte nun im Index in der Spalte CustomerId. Gleich nach der Aufnahme von CustomerId war das Problem verschwunden.
Frage CustomerId schien der Täter zu sein, bis es in den Index aufgenommen wurde. ABER WIE ???
Sie fügen in eine temporäre Tabelle ein, sodass ** ** ** - ** - Operationen zusätzliche Zeit in Anspruch nehmen können. Ich möchte sagen, dass alle Operationen nicht "in der Luft" durchgeführt werden und jeder hat Konsequenzen. Die vorherige Operation konnte aufgrund des aktuellen relevanten Cache-Inhalts einige Zeit beanspruchen (wie lange würde sie nach DBCC DROPCLEANBUFFERS ausgeführt werden?). Die vorherige Operation verursachte Schreibvorgänge von 3.2M-Zeilen in tempdb. Es gibt eine Chance, dass 17s Dateierweiterung von Tempdb nahm. Wie viele Seitenaufteilungen sind nach dem Einfügen der Spalten aufgetreten? Haben Sie danach den Clustered Index neu erstellt (defragmentiert)? –
Es geht nicht nur um _ "wie funktioniert der Index bei Auswahl" _. Jede Aktion, die Sie ausgeführt haben, hatte Auswirkungen. Select hatte einen Effekt sowie Einfügen, Spalten erstellen und ein anderes Auswahl-In. Und ich verstehe nicht ganz, warum du anfingst, über MARKS zu reden, aber ich habe Tests an zwei anderen Tischen durchgeführt. –
DBCCDROPCLEANBUFFERS wurde vor der Ausführung der obigen Abfrage durchgeführt. Ja, der Clusered-Index wurde neu erstellt (einschließlich der Spalte CustomerId), nachdem die neue Spalte – Sadiq