Mysql
 sql >> Database >  >> RDS >> Mysql

Ottimizzazione della mia query mysql per utilizzare l'indice per l'ordinamento

Credo che la query che hai probabilmente corrisponda a una grande percentuale dei dati nella tabella. In situazioni come questa, l'ottimizzatore MySQL sceglie spesso di eseguire una scansione della tabella e ignorare completamente gli indici, poiché in realtà è più veloce che affrontare il problema della lettura aggiuntiva dell'intero indice e utilizzarlo per prelevare i dati. Quindi, in questo caso, suppongo che public_private='yes' and approved='yes' corrisponde a una buona porzione della tua tavola. Pertanto, se MySQL salta l'utilizzo dell'indice per questo motivo, non è nemmeno disponibile per l'ordinamento.

Se vuoi davvero che utilizzi un indice, la soluzione sarebbe usare FORCE INDEX :

select * from videos FORCE INDEX (approved_2) where public_private='public' and approved='yes' order by number_of_views desc;

Tuttavia, eseguirei alcuni test per assicurarmi che ciò che stai ottenendo sia effettivamente più veloce di ciò che l'ottimizzatore MySQL ha scelto di fare. Apparentemente l'ottimizzatore ha alcuni problemi con le selezioni per l'ordine, quindi potresti sicuramente provare e vedere se ottieni prestazioni migliorate.