Domanda

Contenuto di un sito web è memorizzato in un database MySQL. Il 99% del contenuto sarà attivato, ma alcuni (utenti, i messaggi, ecc) sarà disattivato. La maggior parte delle query finale come WHERE (...) AND enabled

E 'una buona idea per creare un indice sul campo 'abilitato'?

È stato utile?

Soluzione

Non sarebbe molto utile la creazione di un indice proprio sulla enabled solo. Ma potrebbe essere utile creare un indice composto in cui è incluso enabled, al fine di ottenere ORDER BY ottimizzazione .

Per esempio, se qualcosa di simile a questa era una domanda comune:

SELECT * FROM things WHERE c1='foo' AND enabled=1 ORDER BY c2

Un indice su c1 permetterebbe le righe corrispondenti a trovare rapidamente, ma sarebbe ancora bisogno di essere ordinati in una fase separata utilizzando c2.

Un indice su c1, c2 dovrebbe consentire l'ordinamento da fare dall'indice, accelerando notevolmente la query di ordinamento, ma la mancanza di enabled nell'indice avrebbe sconfitto che, perché avrebbe dovuto compilare la lista delle righe corrispondenti indicizzati da c1, poi scansione ogni riga per controllare di enabled prima classificare i risultati da c2.

Se l'indice dovesse enabled, c1, c2 o c1, enabled, c2, l'intera condizione WHERE e l'ordinamento potrebbero essere prese direttamente dall'indice, dando più velocemente i risultati.

Come sempre, sarà dipende da quali query che stai facendo; si dovrebbe SPIEGARE le vostre domande più comuni, per controllare di sicuro quello che sta facendo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top