index ‚aktiviert‘ Felder gute Idee?
-
05-10-2019 - |
Frage
Inhalt einer Website in einer MySQL-Datenbank gespeichert. 99% des Inhalts wird aktiviert, aber einige (Benutzer, Beiträge etc.) wird deaktiviert. Die meisten der Anfragen enden als WHERE (...) AND enabled
Ist es eine gute Idee, einen Index für das Feld ‚Aktiviert‘ erstellen?
Lösung
Es würde nicht viel nützen allein einen Index nur auf enabled
zu schaffen. Aber es könnte nützlich sein, eine Verbindung Index zu erstellen, in dem enabled
enthalten ist, um ORDER BY-Optimierung .
Zum Beispiel, wenn so etwas wie dies eine gemeinsame Abfrage ist:
SELECT * FROM things WHERE c1='foo' AND enabled=1 ORDER BY c2
Ein Index für c1
würde die passenden Zeilen erlaubt schnell gefunden werden, aber es müßte noch in einer separaten Schritt unter Verwendung von c2
sortiert werden.
Ein Index für c1, c2
sollte der Reihenfolge, damit aus dem Index durchgeführt werden, stark die Abfrage beschleunigte Sortierung, aber der Mangel an enabled
im Index würde die Niederlage, denn es haben würde, die Liste der passenden Zeilen kompilieren indiziert von c1
, und scannen jede Zeile es die enabled
zu überprüfen, bevor die Ergebnisse von c2
sortieren.
Wenn der Index enabled, c1, c2
oder c1, enabled, c2
sind, die ganze WHERE-Bedingung und der Besteller konnten aus dem Index direkt getroffen werden, so dass schnellere Ergebnisse.
Wie immer, es wird davon abhängen, was fragt Sie tun; Sie sollten ERKLÄREN Ihre meistverbreitete Abfragen Check sicher, was es tut.