2 Stimmen

MySQL: Unterschied zwischen `... ADD INDEX(a); ... ADD INDEX(b);` und `... ADD INDEX(a,b);`?

Kann mir jemand sagen, worin der Unterschied zwischen diesen beiden besteht?

ALTER TABLE x1 ADD INDEX(a);
ALTER TABLE x1 ADD INDEX(b);

UND

ALTER TABLE x1 ADD INDEX(a,b);

Ich weiß, dass es sich dabei um ganz grundlegende Dinge handelt, aber manchmal finde ich, dass Ersteres ein wenig schneller zu sein scheint als Letzteres. Ist das nur mein Gefühl oder gibt es dafür einen tatsächlichen Grund?

4voto

Ralf Edmund Punkte 1007

Der kombinierte INDEX ist eine Kombination aus den Schlüsseln "a" und "b". Er verbessert den Zugriff erheblich, wenn entweder "a" oder "a" UND "b" Teil des Suchbegriffs sind.

Dieser Index ist nicht hilfreich, wenn Sie in Ihren SQL-Anweisungen nur "b" angeben.

Daher könnte es sinnvoll sein, zwei verschiedene Indizes bereitzustellen, die jedoch unterschiedliche Namen tragen sollten.

Abhängig von den Zugriffsmustern würde ich einen Index auf "a" und "b" und einen zusätzlichen Index auf "b" empfehlen, wenn dies Ihren Bedürfnissen entspricht.

Bitte bedenken Sie, dass jeder zusätzliche Index die Datenbank bei allen Operationen, die Daten verändern, verlangsamt. In manchen Fällen ist es besser, einige Indizes wegzulassen. Normalerweise ist es ein guter Ratschlag, KEINE Indizes für irgendeine Spalte einer Tabelle zu verwenden.

Noch ein Tipp: Um zu entscheiden, ob ein INDEX(a,b) oder INDEX(b,a) verwendet werden soll, schauen Sie sich die Verteilung Ihrer Daten an. Setzen Sie die Werte mit der größten Streuung in die erste Spalte des Indexes, um die Selektivität des Indexes zu erhöhen. Dieser Wert richtet sich normalerweise nach der Qualität des ersten Indexelements.

Zum Beispiel sollte ein Index auf die Spalten NAME und SEX als INDEX(NAME, SEX) erstellt werden, da es viel mehr Namen als verschiedene Geschlechter gibt.

3voto

Alison R. Punkte 4124

INDEX(a,b) beschleunigt die Suche nach a o a y b , aber nicht b allein, während die erstgenannten ( INDEX(a) ... INDEX(b) ) wird in allen Fällen funktionieren.

2voto

Daniel Vassallo Punkte 325264

Mit der zweiten Option wird die folgende Abfrage den Index nicht verwenden:

SELECT * FROM x1 WHERE b = 'something';

Die Reihenfolge, in der die Spalten in der Indexdefinition aufgeführt sind, ist wichtig. Es ist möglich, einen Satz von Zeilenbezeichnern nur über die erste indizierte Spalte abzurufen. Es ist jedoch nicht möglich oder effizient (bei den meisten Datenbanken), die Menge der Zeilenbezeichner nur über die zweite oder höhere indizierte Spalte abzurufen.

Quelle: Wikipedia - Datenbank-Index: Spaltenreihenfolge

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X