Nehmen wir an, in der Mitarbeitertabelle habe ich einen Index (idx_name) für die emp_name
Spalte der Tabelle erstellt.
Muss ich den Indexnamen in der select-Klausel explizit angeben, sonst wird er automatisch verwendet, um Abfragen zu beschleunigen.
Wenn es in der select-Klausel angegeben werden muss, wie lautet die Syntax für die Verwendung des Index in der select-Abfrage?
Gute Frage,
Normalerweise sollte die DB-Engine den zu verwendenden Index automatisch basierend auf den von ihr erstellten Abfrageausführungsplänen auswählen. Es gibt jedoch einige ziemlich seltene Fälle, in denen Sie die Datenbank zwingen möchten, einen bestimmten Index zu verwenden.
Um Ihre spezifische Frage beantworten zu können, müssen Sie die von Ihnen verwendete Datenbank angeben.
Für MySQL möchten Sie die Dokumentation zur Index-Hinweis-Syntax lesen
quelle
Wie verwende ich den Index in der select-Anweisung?
diesen Weg:
Und viele weitere Möglichkeiten, dies zu überprüfen
Muss ich explizit angeben?
quelle
Im Allgemeinen wird der Index verwendet, wenn die angenommenen Kosten für die Verwendung des Index und möglicherweise für die weitere Suche nach Lesezeichen geringer sind als die Kosten für das Scannen der gesamten Tabelle.
Wenn Ihre Anfrage die Form hat:
Und 1 Reihe von 1000 hat den Namen Boris, es wird mit ziemlicher Sicherheit verwendet. Wenn alle Boris heißen, wird wahrscheinlich auf einen Tabellenscan zurückgegriffen, da der Index wahrscheinlich keine effizientere Strategie für den Zugriff auf die Daten darstellt.
Wenn es sich um eine breite Tabelle handelt (viele Spalten) und Sie Folgendes tun:
Dann kann es immer noch entscheiden, den Tabellenscan durchzuführen, wenn es eine vernünftige Annahme ist, dass das Abrufen der anderen Spalten aus der Tabelle mehr Zeit in Anspruch nimmt, als nur den Namen nachzuschlagen, oder erneut, wenn es wahrscheinlich ist, dass a abgerufen wird viele Zeilen sowieso.
quelle
Der Optimierer beurteilt, ob die Verwendung Ihres Index die Ausführung Ihrer Abfrage beschleunigt, und wenn dies der Fall ist, verwendet er den Index.
Abhängig von Ihrem RDBMS können Sie die Verwendung eines Index erzwingen, obwohl dies nur empfohlen wird, wenn Sie wissen, was Sie tun.
Im Allgemeinen sollten Sie Spalten indizieren, die Sie in Tabellenverknüpfungen und where-Anweisungen verwenden
quelle
Wenn Sie die Spalte verwenden, auf die der Index innerhalb Ihrer Bedingungen angewendet wird, wird er automatisch eingefügt. Sie müssen es nicht verwenden, aber es beschleunigt Abfragen, wenn es verwendet wird.
Verwendet den entsprechenden Index.
quelle
Wenn Sie einen Index für eine Tabelle erstellen, verwendet die Datenbank diesen Index im Allgemeinen automatisch, wenn Sie nach Daten in dieser Tabelle suchen. Sie müssen nichts dagegen tun.
In MSSQL können Sie jedoch einen
index hint
angeben, der angeben kann, dass ein bestimmter Index zum Ausführen dieser Abfrage verwendet werden soll. Weitere Informationen hierzu finden Sie hier .Index hint
scheint auch für MySQL verfügbar zu sein . Vielen Dank an Tudor Constantine.quelle
Der Indexhinweis ist nur für Microsoft Dynamics-Datenbankserver verfügbar. Bei herkömmlichem SQL Server sollten die Filter, die Sie in Ihrer 'Where'-Klausel definieren, die Engine davon überzeugen, relevante Indizes zu verwenden ... Vorausgesetzt, der Ausführungsplan der Engine kann effizient identifizieren, wie die Informationen gelesen werden sollen (ob ein vollständiger Tabellenscan oder ein indizierter Scan ) - Es muss die beiden vergleichen, bevor die eigentliche Anweisung als Teil seines integrierten Leistungsoptimierers ausgeführt wird.
Sie können den Optimierer jedoch zwingen, mit etwas wie zu scannen
Oder um einen bestimmten Index zu suchen, indem Sie so etwas verwenden
Es ist deine Entscheidung. Sehen Sie sich die Indexeigenschaften der Tabelle im Objektfenster an, um eine Vorstellung davon zu erhalten, welchen Index Sie verwenden möchten. Es sollte zu Ihren Filtern passen.
Um die besten Ergebnisse zu erzielen, listen Sie die Filter auf, die zuerst die wenigsten Ergebnisse liefern würden. Ich weiß nicht, ob ich richtig sage, aber es scheint, dass die Abfragefilter sequentiell sind. Wenn Sie Ihre Sequenz richtig eingestellt haben, sollte der Optimierer dies nicht für Sie tun müssen, indem er alle Kombinationen vergleicht, oder zumindest nicht mit den teureren Abfragen beginnen.
quelle