6 Stimmen

Setzen Sie Indizes auf eine Tabelle mit vielen BOOL/TINYINT?

Ein alter Mentor sagte mir einmal, ich solle Indizes auf die meisten Dinge setzen, die man mit einem WHERE Klausel für.

Sollte ich einen Index auf BOOL/TINYINT 's? In der Tabelle, mit der ich arbeite, gibt es eine beträchtliche Anzahl von ihnen, und oft werden die Ergebnisse nach 1-20 dieser booleschen Bedingungen gefiltert.

13voto

Mark Wilkins Punkte 39992

Es gibt eine Situation, in der ein Index für ein boolesches Feld (oder ein anderes Feld mit geringer Kardinalität) nützlich sein könnte. Wenn einer der Werte relativ selten vorkommt (z. B. 10 WAHR-Werte von einer Million) und Sie relativ häufig nach diesen wenigen Werten suchen, dann wäre ein Index nützlich.

1voto

Jan K. Punkte 1601

Ich kann nicht auf die winzigen ints sprechen (es könnte sehr gut das gleiche sein), aber ich würde nicht Index booleans aus dem einfachen Grund, dass sie nur zwei Werte annehmen können.

Soweit ich mich erinnere, sollten Sie Indizes für Spalten mit einer hohen Kardinalität verwenden. Was nützt ein Index für eine Spalte, die nur zwei verschiedene Werte annehmen kann? Das ist eine Platzverschwendung ohne wirklichen Gewinn.

Ich empfehle auch Welche bewährten Praktiken und "Faustregeln" gibt es für die Erstellung von Datenbankindizes? zur weiteren Lektüre.

Wie bereits erwähnt, sollten Sie einen Index auf eine Sammlung von Bedingungen setzen; welche das sind, hängt von Ihrer Abfrage ab.

1voto

egrunin Punkte 23979

Sie könnten einen Index für eine Kombination der Felder.

Indizierung auf Bool1 könnte sinnlos sein, weil es nur 2 Werte gibt. Die Indizierung auf Bool1, Bool2, Bool3, Bool4, Bool5...Bool16 hat 2^16 Werte.

1voto

Magnus Hagander Punkte 22152

In der Regel möchte man zumindest nicht auf einen Booleschen Wert indizieren. Die Erstellung eines Teilindexes über etwas anderes mit der booleschen Prüfung als Prädikat kann jedoch eine der effizientesten verfügbaren Indizierungsoptionen sein - wenn Ihr boolesches Feld eine Menge Daten aus dem Index ausschließt. Dies ist oft sehr viel effizienter als ein kombinierter Index mit einer anderen Spalte.

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