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

Index ein Bitfeld in MYSQL

Im Allgemeinen nein. Ein Bi-State-Feld beschleunigt Abfragen nicht, wenn es indiziert wird, da Sie im Durchschnitt die Hälfte der Zeilen betrachten müssen. Sie möchten, dass Ihre Indexeinträge selektiv sind – ein bestimmter Eintrag im Index sollte nur einen kleinen Prozentsatz der möglichen Werte darstellen (z. B. weniger als 10 %, vorzugsweise in Bruchteilen von Prozent). Dann ignoriert die Verwendung des Indexes die meisten Daten in der Tabelle, was Ihnen einen Leistungsvorteil verschafft.

Einige DBMS unterstützen Bitmap-Indizes. Sie können helfen, aber Sie haben immer noch das Problem der Selektivität.

Die aktualisierte Frage besagt, dass die Anzahl der Werte mit dem Wert 1 gering sein wird (weniger als ein Prozent); bringt Ihnen ein Index jetzt einen Vorteil?

Die Antwort lautet:

  • Für die Abfragen, bei denen Sie angeben, dass der Wert 1 ist, könnte ein Index für die Spalte einen Vorteil bieten, vorausgesetzt, der Optimierer verwendet den Index tatsächlich. Möglicherweise müssen Sie das DBMS optimieren, damit es erkennt, dass der Index verzerrt ist, um ihn mit Abfragen zu verwenden, bei denen der Wert 1 ist. Dies ist in der Regel DBMS-spezifisch, aber das Aktualisieren von Statistiken in verschiedenen Formen ist der Name des Spiels, möglicherweise auch unter Verwendung von Hinweisen in den SQL-Abfragen. Wenn der Optimierer den Index niemals verwendet, bietet er natürlich immer noch keinen Vorteil - und der Optimierer kann entscheiden, dass ihm andere Indizes in irgendeiner Weise mehr helfen.

  • Für Abfragen, bei denen der Wert 0 ist, sollte der Index nicht verwendet werden. Es besteht jedoch die Möglichkeit, dass das DBMS den Index auch für die 0-Werte weiter verwaltet - obwohl es diese niemals verwenden sollte. Es wäre ein ungewöhnliches DBMS, das befohlen werden könnte, diese Spalte nur für andere Werte als Null zu indizieren, obwohl dies sehr vorteilhaft wäre.

Also - es kommt darauf an. Es hängt von den Abfragen ab, und es hängt vom Optimierer ab.

Beachten Sie auch, dass ein zusammengesetzter Index - auf einige andere üblicherweise verwendete Spalten und dann auf das Bit-Feld durchaus einige Vorteile bieten kann. Wenn Sie also fast immer einen Datumsbereich auswählen, sollte Ihnen ein zusammengesetzter Index für die Datums- und Bitfeldspalten (wahrscheinlich in dieser Reihenfolge) einen guten Index liefern.