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

MySQL-Prestazioni al momento dell'ordine su colonna calcolata

In realtà non puoi ottimizzare quella query.

Stai ordinando il risultato utilizzando un valore calcolato, quindi non puoi utilizzare un indice. Se usi explain potresti vedere come viene eseguita la tua query e using temporary sarà presente negli extra colonna, il che significa che tutti i dati della query vengono archiviati in una tabella temporanea in cui viene eseguito l'ordinamento.

Non importa se vuoi solo le prime 50 corrispondenze nella query, deve prima ottenere tutti i dati, scaricarli in una tabella temporanea, ordinare il risultato in quella tabella e quindi restituire le prime 50 corrispondenze.

Come puoi supporre, questa è un'operazione che richiede tempo e memoria.

Quindi l'opzione migliore è inserire un indice nella tabella per ottenere tutte le righe di cui hai bisogno il più velocemente possibile e quindi elaborarle con php per ottenere i dati di cui hai bisogno.

A proposito, dai un'occhiata alla Guida all'ottimizzazione di MySQL .