Maison >base de données >tutoriel mysql >Analyser l'efficacité de or et in dans MySQL avec des exemples

Analyser l'efficacité de or et in dans MySQL avec des exemples

藏色散人
藏色散人avant
2021-09-25 17:12:492383parcourir

Analyser l'efficacité de or et in dans MySQL avec des exemples

L'efficacité de or et in dans mysql

Avant-propos

Aujourd'hui, j'ai rencontré un problème de blocage de site Web. Il m'a fallu quelques minutes pour m'en remettre, j'ai trouvé un sql dans un script planifié, et l'efficacité d'exécution était. très lent. Le DBA a suggéré de changer ou d'entrer, ce qui a amélioré l'efficacité des centaines de fois

Description du scénario

1 Requête d'association à deux tables
2 La quantité de données dans la table1 est proche de 1 million
3. des données dans la table2 sont proches de 9 millions
4. Le champ de titre dans les conditions de requête n'est pas indexé
5. Instruction de requête originale

SELECT a.id as id FROM `table1`as a left join table2 as b on a.id=b.id WHERE b.title="衣服" or b.title="裤子" or b.title="帽子" limit 0,100

6. Instruction de requête transformée

SELECT a.id as id FROM `table1`as a left join table2 as b on a.id=b.id WHERE b.title IN ("衣服","裤子","帽子") limit 0,100

Efficacité après transformation

Le temps d'exécution de l'original. SQL est de 5 secondes, après le changement, cela ne prend que 0,01 seconde

La raison

J'ai vérifié les informations et constaté que lorsque le volume de données dépasse un million et que les conditions ne sont pas indexées, l'efficacité de la requête de ou est bien inférieure à celle de in. L'efficacité de or est O(n), tandis que l'efficacité de in est O(logn). Lorsque n est plus grand, la différence d'efficacité devient plus évidente.

Apprentissage recommandé : "tutoriel vidéo mysql"

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer