2010-05-11 8 views
2

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

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

+0

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

+1

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

+1

@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. –