Ich habe gerade an einer Webanwendung gearbeitet und festgestellt, dass die mysql -Tabellen am meisten Felder wie is_live, can_do, required, published
(und viele mehr) mit dem Feldtyp TINYINT haben und nur 0 or 1
verwenden. Ich habe mich nur gefragt, ob ich Indizes für diese Spalten erstellen muss, da Skripte Joins verwenden, die auch diese Spalten enthalten. Fragen sind also:
Sollte ich diesen Spalten auch Indizes hinzufügen?
Sollte ich den Typ auf etwas anderes ändern?
Bitte sehen Sie, dass diese Frage mehr damit zu tun hat, das Konzept zu verstehen als ein Problem zu lösen.
Danke.
Mein Datenbank-Guru sagt: "Fügen Sie niemals einen Index hinzu, wenn Sie die Abfrage nicht kennen". In Ihrem Fall sieht es so aus, als ob Sie die Abfrage kennen. Also ja, wir können über Index nachdenken. Wenn Sie ein System vom Typ Data Warehouse haben, erstellen Sie einen Bitmap-Index. Andernfalls erstellen Sie keinen Index. B-Tree-Indizes sind in solchen kleinen Kardinalspalten schlecht.
Der allgemeine Hinweis lautet, dass ein Index für boolesche Felder selten nützlich sein wird.
B-Tree-Indizes sind am effektivsten für Daten mit hoher Kardinalität (d. h. Spalten mit vielen möglichen Werten, wobei die Daten in der Spalte eindeutig oder fast eindeutig sind).
Einige Datenbank-Engines, wie Oracle und Postgres, unterstützen Bitmap-Indizes . Bitmap-Indizes wurden traditionell als gut für Daten wie Geschlecht (männlich oder weiblich), die eine kleine Anzahl von verschiedenen Werten, aber mit vielen Vorkommen dieser Werte hat, angesehen.
MySQL unterstützt derzeit keine Bitmap-Indizes, kann jedoch ähnliche Funktionen mit der Funktion "index_merge" erreichen. Bitmap-Indizes sollten mit der Falcon-Engine ( Quelle ) eingeführt werden.
Ich bezweifle, dass diese Felder in Joins verwendet werden, da sie 0 oder 1 als Eingabe annehmen.
Die primäre Verwendung eines Index in diesem Fall wäre die Möglichkeit, die Daten direkt aus dem Index abzurufen, aber da der Index ziemlich groß wäre, würde der Overhead dies höchstwahrscheinlich unwirksam machen.
Allerdings ist der einzige gültige Ansatz hier, Ihren Datensatz zu testen, da die von Ihnen verwendeten Daten einen erheblichen Einfluss auf das Ergebnis haben können.
Die Entscheidung, ob indexiert werden soll oder nicht, sollte nicht vom Datentyp abhängig sein, sondern von