J'ai une requête ayant plusieurs regexp dans la clause where. Les colonnes contenues dans la clause where ont déjà été indexées. Mais la requête n'utilise pas les index. Est-ce que MySQL regexp cause l'utilisation d'index? Si non, quelle pourrait être la solution pour cela?MySQL regexp sur les index
2
A
Répondre
4
Non, une recherche d'expression régulière ne peut pas utiliser un index. Si la chose à laquelle vous appliquez la regex est un index, cela peut aller un peu plus vite, mais vous effectuez essentiellement une analyse de table.
La seule solution de contournement que je connais est d'utiliser LIKE 'foo%'
au lieu de RLIKE 'foo.*'
si c'est votre expression régulière. Un index sur une telle colonne peut utiliser le LIKE mais pas le RLIKE
Questions connexes
- 1. MySQL joindre basé sur regexp
- 2. Question MySQL: Index sur les colonnes!
- 3. mysql btree index sur les tables InnoDB?
- 4. Comment écrire MySQL REGEXP?
- 5. MySql Pas comme Regexp?
- 6. Shorter REGEXP pour MySQL requête
- 7. mySQL Regexp avec des crochets
- 8. Choisir les champs dans un index multichamp sur MySQL
- 9. mysql: boucle sur les tables et alter table ajouter index
- 10. besoin REGEXP Matching dans MySQL
- 11. Php-MySQL: Undefined index sur mensonge
- 12. Mysql REGEXP 'o' OU 'aw'
- 13. MySQL REGEXP à SQL Server
- 14. index mysql ajouter
- 15. Afficher les index dans la table MySQL
- 16. MySQL n'utilisant des index
- 17. index de plage mysql
- 18. Requête mysql et index
- 19. MySQL index FULLTEXT
- 20. fonction MySql ne pas utiliser les index
- 21. Vues mySQL Index
- 22. MySQL ignore mon index
- 23. MySQL ignore mon index
- 24. Ruby 1.8 regexp: index de correspondance dans la chaîne utf
- 25. Regexp écraser sur iPhone
- 26. Comment utiliser Regexp dans MySQL Remplacer les commandes?
- 27. Mysql REGEXP comment faire une correspondance exacte
- 28. MySQL REGEXP (problème avec ordre params)
- 29. Caractères hexadécimaux dans regexp correspondant dans mysql
- 30. Conception de MySQL Unique Index
Merci David. C'est exactement ce que je voulais confirmer .. Mais, j'ai déjà travaillé avec 'LIKE'. Mon problème est que je veux chercher sur les deux côtés. Le test peut être à n'importe quelle position sur le terrain. Par conséquent, la requête est LIKE '% foo%'. Y a-t-il un moyen de faire fonctionner les index dans un tel cas? Remerciements Vivek – Vivek
Ceci est correct. Si vous pouvez affiner en utilisant un "% constant" LIKE, cette clause utilisera au moins un index pour limiter les résultats. – Konerak
@Vivek malheureusement pas. Comme il s'est avéré, je travaillais exactement sur la même chose récemment, en essayant de mettre en cache intelligemment les résultats de 'LIKE '% foo%'' car un index ne peut pas aider cela. –