Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment optimiser la base de données de cette requête dans une grande base de données ?

Vous n'avez pas d'index en plus de la clé primaire. Vous devez créer un index sur les champs que vous utilisez dans votre instruction WHERE. Si vous avez besoin d'indexer un seul champ ou une combinaison de plusieurs champs, cela dépend des autres SELECT que vous exécuterez sur cette table.

Gardez à l'esprit que REGEXP ne peut pas du tout utiliser les index, LIKE peut utiliser l'index uniquement lorsqu'il ne commence pas par un caractère générique (donc LIKE 'a%' peut utiliser l'index, mais LIKE '%a' ne peut pas), plus grand que / plus petit que (<>) n'utilisent généralement pas non plus d'index.

Il vous reste donc le code et check des champs. Je suppose que de nombreuses lignes auront la même valeur pour check , donc je commencerais l'index avec code champ. Les index multi-champs ne peuvent être utilisés que dans l'ordre dans lequel ils sont définis...

Imaginez un index créé pour les champs code, check . Cet index peut être utilisé dans votre requête (où la clause WHERE contient les deux champs), également dans la requête avec uniquement code champ, mais pas en requête avec seulement check champ.

Est-il important de ORDER BY id ? Sinon, laissez-le de côté, cela empêchera le tri et votre requête se terminera plus rapidement.