it-swarm.com.de

Wie verwende ich den Index in der select-Anweisung?

Angenommen, in der Employee-Tabelle habe ich einen Index (idx_name) für die Spalte emp_name der Tabelle erstellt.

Muss ich den Indexnamen in der select-Klausel explizit angeben, oder er wird automatisch zur Beschleunigung von Abfragen verwendet.

Wenn es in der select-Klausel angegeben werden muss, wie lautet die Syntax für die Verwendung des Index in select-Abfrage?

74
Vivek

Wenn Sie den Index testen möchten, um zu sehen, ob er funktioniert, finden Sie hier die folgende Syntax:

SELECT *
FROM Table WITH(INDEX(Index_Name))

Die WITH-Anweisung erzwingt die Verwendung des Index.

72
Jason

Gute Frage, 

Normalerweise sollte die DB-Engine automatisch den zu verwendenden Index basierend auf den von ihr erstellten Abfrageausführungsplänen auswählen. Es gibt jedoch 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 den DB angeben, den Sie verwenden.

Für MySQL möchten Sie die Index-Hinweis-Syntax -Dokumentation lesen

31

Wie verwende ich den Index in der select-Anweisung? 
diesen Weg:

   SELECT * FROM table1 USE INDEX (col1_index,col2_index)
    WHERE col1=1 AND col2=2 AND col3=3;


SELECT * FROM table1 IGNORE INDEX (col3_index)
WHERE col1=1 AND col2=2 AND col3=3;


SELECT * FROM t1 USE INDEX (i1) IGNORE INDEX (i2) USE INDEX (i2);

Und viele weitere Möglichkeiten überprüfen dies

Muss ich das explizit angeben?

  • Nein, keine explizite Angabe.
  • Das DB-Modul sollte den zu verwendenden Index automatisch auf der Grundlage von Abfrageausführungsplänen auswählen, die er aus der @Tudor Constantin-Antwort erstellt.
  • Das Optimierungsprogramm beurteilt, ob die Abfrage durch die Verwendung Ihres Index schneller ausgeführt wird. Ist dies der Fall, wird der Index verwendet. von @niktrl antworten
25
VdeX

In general wird der Index verwendet, wenn die Kosten für die Verwendung des Index angenommen werden und dann möglicherweise weitere Lesezeichensuchen durchgeführt werden müssen, als wenn Sie die gesamte Tabelle scannen.

Wenn Ihre Anfrage die Form hat:

SELECT Name from Table where Name = 'Boris'

Und 1 von 1000 hat den Namen Boris, er wird fast sicher verwendet. Wenn alle Boris heißen, wird wahrscheinlich auf einen Tabellenscan zurückgegriffen, da es unwahrscheinlich ist, dass der Index eine effizientere Strategie für den Zugriff auf die Daten darstellt.

Wenn es sich um eine große Tabelle handelt (viele Spalten), und Sie tun:

SELECT * from Table where Name = 'Boris'

Dann kann es sich dennoch entscheiden, den Tabellenscan durchzuführen, wenn es eine vernünftige Annahme ist, dass das Abrufen der anderen Spalten aus der Tabelle länger dauert als das Nachschlagen des Namens sowieso viele Reihen.

13

Das Optimierungsprogramm beurteilt, ob die Abfrage durch die Verwendung Ihres Index schneller ausgeführt wird. Ist dies der Fall, wird der Index verwendet. 

Abhängig von Ihrem RDBMS können Sie die Verwendung eines Index erzwingen. Dies wird jedoch nicht empfohlen, es sei denn, Sie wissen, was Sie tun. 

Im Allgemeinen sollten Sie Spalten indizieren, die Sie in den Tabellenverknüpfungen und Where-Anweisungen verwenden

9
niktrs

Wenn Sie einen Index für eine Tabelle erstellen, verwendet die Datenbank diesen Index normalerweise automatisch, während 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 zur Ausführung dieser Abfrage verwendet werden soll. Mehr Informationen dazu finden Sie hier .

Index hint scheint auch für MySQL verfügbar zu sein. Danke an Tudor Constantine. 

5
MD Sayem Ahmed

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.

SELECT * FROM TABLE WHERE attribute = 'value'

Verwendet den entsprechenden Index.

3
ChrisBint

Der Indexhinweis ist nur für Microsoft Dynamics-Datenbankserver verfügbar. Für traditionelle SQL Server sollten die von Ihrer "Where" -Klausel definierten Filter die Engine dazu bringen, alle relevanten Indizes zu verwenden ... Wird der Ausführungsplan der Engine bereitgestellt kann effizient erkennen, wie die Informationen gelesen werden sollen (ob ein vollständiger Tabellenscan oder ein indizierter Scan) - er muss die beiden Informationen vergleichen, bevor er die Anweisung als Teil des integrierten Leistungsoptimierungsprogramms ausführt.

Sie können den Optimierer jedoch zwingen, einen Scanvorgang durchzuführen, indem Sie beispielsweise etwas verwenden

    Select  *
    From    [yourtable] With (Index(0))
    Where   ...

Oder um einen bestimmten Index zu suchen, indem Sie etwas verwenden

    Select  *
    From    [yourtable] With (Index(1))
    Where   ...

Es ist deine Entscheidung. Sehen Sie sich die Indexeigenschaften der Tabelle im Objektbereich 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 zurückgeben würden .. Ich weiß nicht, ob ich Recht habe, aber es scheint, als seien die Abfragefilter sequentiell; Wenn Sie die richtige Reihenfolge gefunden haben, muss der Optimierer dies nicht für Sie tun, indem Sie alle Kombinationen vergleichen, oder den Vergleich nicht mit den teureren Abfragen beginnen.

1
Cory