La colonna deleted_at
non è un buon candidato indice. Cercherò di spiegare meglio rispetto al commento: gli indici sono utili solo quando la loro cardinalità è relativamente alta. La cardinalità è un numero che descrive l'unicità dell'indice nel set di dati. Ciò significa che è il numero totale di record diviso per i record univoci totali.
Ad esempio, la cardinalità della chiave primaria è 1. Ogni record contiene un valore univoco per la chiave primaria. 1 è anche il numero più alto. Puoi considerarlo come un "100%".
Tuttavia, una colonna come deleted_at non ha un valore simile. Cosa fa Laravel con deleted_at è controllare se è o non è nullo. Ciò significa che ha due valori possibili. Le colonne che contengono due valori hanno una cardinalità estremamente bassa che diminuisce con il crescere del numero di record.
È possibile indicizzare una colonna di questo tipo, ma non sarà di alcun aiuto. Quello che accadrà è che potrebbe rallentare le cose e occupare spazio.
TL; DR: no, non è necessario indicizzare tale colonna, l'indice non avrà alcun impatto positivo sulle prestazioni.
fonte
2014-10-23 14:29:48
Non ha bisogno di un indice. Se è nullo, non viene eliminato. Se ha un valore, viene eliminato. Ciò significa che ha due valori possibili per funzionare. Le colonne con due valori utilizzabili non sono buoni candidati indice - la loro cardinalità sta convergendo a 0. Pertanto, l'deleted_at non ha bisogno di un indice. –
Ok, grazie. Ho pensato che quasi ogni clausola 'where' deve essere indicizzata. Puoi postare il tuo commento come risposta, se vuoi. –