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

Benötigt Laravels soft_delete einen Index für MySQL?

Die Spalte deleted_at ist kein guter Indexkandidat. Ich werde versuchen, es im Vergleich zum Kommentar besser zu erklären:Indizes sind nur nützlich, wenn ihre Kardinalität relativ hoch ist. Die Kardinalität ist eine Zahl, die die Eindeutigkeit des Index im Datensatz beschreibt. Das heißt, die Gesamtzahl der Datensätze dividiert durch die Gesamtzahl der eindeutigen Datensätze.

Beispielsweise ist die Kardinalität des Primärschlüssels 1. Jeder Datensatz enthält einen eindeutigen Wert für den Primärschlüssel. 1 ist auch die höchste Zahl. Sie können es als "100 %" betrachten.

Aber eine Spalte wie „deleted_at“ hat keinen solchen Wert. Was Laravel mit "deleted_at" macht, ist zu prüfen, ob es null ist oder nicht. Das heißt, es gibt zwei mögliche Werte. Spalten, die zwei Werte enthalten, haben eine extrem niedrige Kardinalität, die mit zunehmender Anzahl von Datensätzen abnimmt.

Sie können eine solche Spalte indizieren, aber es wird Ihnen nicht weiterhelfen. Was passieren wird, ist, dass es die Dinge verlangsamen und Speicherplatz beanspruchen könnte.

TL;DR:Nein, Sie müssen diese Spalte nicht indizieren, der Index hat keinen positiven Einfluss auf die Leistung.