Peut MySql utiliser un index pour une requête WHERE ... IN?
-
16-10-2019 - |
Question
Nous avons actuellement une requête dans notre application comme ceci:
SELECT * FROM combos WHERE text = '[text]'
Nous mettons une colonne de category_id
sur combos
, et la requête changerons à ceci:
SELECT * FROM combos WHERE category_id in ([c1],[c2],[...]) AND text = '[text]'
À l'heure actuelle, il y a un index sur combos(text)
. Nous pensons à l'enlever et de mettre un sur combos(category_id, text)
. Est-ce que MySql pouvoir utiliser le nouvel indice comme il l'a fait l'ancien? Si la réponse est « ça dépend », qu'est-ce que cela dépend? Faut-il garder l'ancien dans le cas où il ne peut pas?
La solution
parfois .... tant qu'il n'y a pas de condition de plage:
http://dev.mysql.com/ doc / refman / 5.5 / fr / index-fusion-optimization.html
vous pourriez être mieux avec (text, category_id)
- en fonction de votre distribution de données