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

Come ottimizzare il database questa query in un database di grandi dimensioni?

Non hai indici oltre alla chiave primaria. Devi creare un indice sui campi che usi nella tua istruzione WHERE. Se devi indicizzare solo 1 campo o una combinazione di più campi dipende dalle altre SELECT che eseguirai su quella tabella.

Tieni presente che REGEXP non posso usare gli indici, LIKE può usare index solo quando non inizia con un carattere jolly (quindi LIKE 'a%' può usare index, ma LIKE '%a' impossibile), maggiore di / minore di (<>) di solito non usano anche gli indici.

Quindi ti rimane il code e check campi. Suppongo che molte righe avranno lo stesso valore per check , quindi inizierei l'indice con code campo. Gli indici multicampo possono essere utilizzati solo nell'ordine in cui sono definiti...

Immagina l'indice creato per i campi code, check . Questo indice può essere utilizzato nella tua query (dove la clausola WHERE contiene entrambi i campi), anche nella query con solo code campo, ma non in query con solo check campo.

È importante ORDER BY id ? In caso contrario, lascialo fuori, impedirà il passaggio di ordinamento e la tua query verrà completata più velocemente.