Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Indizes und mehrspaltige Primärschlüssel

Ich bin mit den Interna von Indizes auf mySql nicht genau vertraut, aber auf den beiden Produkten von Datenbankanbietern, mit denen ich vertraut bin (MsSQL, Oracle), sind Indizes ausgeglichene Baumstrukturen, deren Knoten als sequenzielles Tupel der Spalten organisiert sind index ist definiert am (In der Sequenz definiert )

Also, sofern mySql es nicht ganz anders macht (wahrscheinlich nicht), kann jeder zusammengesetzte Index (auf mehr als einer Spalte) das für jede Abfrage verwendbar sein, die nach einer Teilmenge filtern oder sortieren muss der Spalten im Index, solange die Spaltenliste kompatibel ist, d. h. wenn die Spalten, wenn sie in derselben Reihenfolge angeordnet sind wie die sequenzierte Spaltenliste im vollständigen Index, eine geordnete Teilmenge des vollständigen Satzes von Indexspalten sind, die am Anfang der eigentlichen Indexsequenz beginnt, ohne Lücken außer am Ende ...

Mit anderen Worten bedeutet dies, dass, wenn Sie einen Index für (a,b,c,d) haben, eine Abfrage, die nach (a), (a,b) oder (a,b,c) filtert, auch den Index verwenden kann , aber eine Abfrage, die nach (b), oder (c) oder (b,c) filtern muss, kann den Index nicht verwenden...

Also in Ihrem Fall, wenn Sie oft nach Spalte item filtern oder sortieren müssen allein, müssen Sie dieser Spalte selbst einen weiteren Index hinzufügen...