Index für Spalte, die nur für IS NULL und IS NOT NULL verwendet wird

8

Ich habe eine Spalte gelöscht in meiner Tabelle. Auf jeder SQL-Anweisung überprüfe ich, ob dieses Flag NULL ist. Möchte jemand Einträge löschen, wird das Flag auf den aktuellen Zeitstempel gesetzt.

Wenn Einträge wiederhergestellt werden sollen, wird dieser Zeitstempel verwendet, um sie wiederherzustellen. Dies ist der einzige Anwendungsfall, wenn der Wert dieser Spalte verwendet wird.

In allen anderen Fällen ist es nur wichtig zu wissen, ob es NULL ist oder NICHT NULL.

In der Zukunft kann und wird die Tabelle Millionen von Zeilen enthalten.

Ist es nützlich, einen Index für diese Spalte zu erstellen? Weil 99% der Aussagen & amp; Anwendungsfälle interessieren den Wert nicht. Optimiert MySQL IS NULL-Bedingungen und daher wird kein Index benötigt?

    
Lukas Schulze 06.11.2011, 07:43
quelle

3 Antworten

2

Ein Index für 'deleted' indexiert auch NULL-Werte und ermöglicht so schnellere Lookups von nicht-null / null

Ich denke, das wird in diesem Fall ausreichen und nicht zu viel Overhead verursachen, da der Timestamp beim Löschen gesetzt ist und daher nicht so viel geändert wird. (Das Gegenteil: Die Verwendung eines Bearbeitungszeitstempels, der ständig geändert wird und nur manchmal auf Null gesetzt wird, würde dazu führen, dass der Index bei jeder Änderung eines Datensatzes angepasst wird. Das ist möglicherweise nicht optimal. Das ist hier nicht der Fall.)

(Auch wenn ich nicht weiß, ob der Indexer schlau genug ist, davon zu profitieren, gehen die erwarteten Änderungen immer an die Enden des Index, entweder am Null-Ende oder am "jüngsten" Ende .)

Natürlich, Profil (sowohl Abfrage Ausführungszeiten und Speicherplatz wenn wichtig) um herauszufinden, ob es tatsächliche Probleme daraus entstehen.

    
Inca 06.11.2011, 11:07
quelle
1

Sie können keine "Archiv" -Tabelle erstellen und gelöschte Zeilen mit ihrem Zeitstempel speichern. Wenn der Benutzer eine Zeile wiederherstellen möchte, müssen Sie diese aus dem Archiv in Ihre Haupttabelle übertragen.

Und Sie müssen nicht "Flag IS NOT NULL" in jeder Abfrage überprüfen

    
j_freyre 06.11.2011 07:47
quelle
-1
  1. Gemäß diesem Buch ( High Performance MySQL, 2. Ausgabe ) wird die Verwendung von "allow NULL" nicht empfohlen "in Spalten Definition in MySQL. MySQL verwendet ein zusätzliches Byte, um den Status der Zelle zu speichern (Null oder nicht Null), und die Indexgröße ist größer als ohne "Zulassen NULL". Bessere Lösung, um den Zeilen-TINYINT-Datentyp zu erstellen und Wert 1 für aktive Zeilen und 0 für gelöschte Zeilen zu speichern. Daher wird empfohlen, in der Spaltendefinition niemals NULL zu verwenden.
Alexey Churkin 06.11.2011 10:39
quelle

Tags und Links