什么是在MySQL中进行模式匹配的有效方法?

时间:2010-08-26 09:09:50

标签: mysql postgresql performance pattern-matching sql-like

我们在查询中有一个巨大的模式匹配(大约要检查12个字符串)。 现在我必须在MySQL中执行此查询,但似乎PostgreSQL中的查询语法不同。

来自PostgreSQL:

SELECT value  
FROM ...  
WHERE ...  
AND `value` !~* '.*(text|text2|text3|text4|text5).*';  

如何以高效的方式在MySQL中执行此操作?我知道,这根本就没有效率。最有效的方法是什么?

这样做可以做到这一点,但可能是最糟糕的查询:

SELECT `value`  
FROM ...  
WHERE ...  

AND NOT (  
   `value` LIKE '%text%'  
OR `value` LIKE '%text2%'  
OR `value` LIKE '%text3%'  
OR `value` LIKE '%text4%'  
OR `value` LIKE '%text5%');  

REGEXP 是怎样走的?然后我将不得不弄清楚相应的表达方式。

1 个答案:

答案 0 :(得分:2)

是,REGEXP或其替代拼写RLIKE

WHERE value NOT RLIKE 'text|text2|text3|text4|text5'

(除非您明确使用^$,否则正则表达式匹配不会锚定到字符串的末尾,因此您不需要.*(...).*。)

您应该对其进行测试,以确定实际比具有LIKE的版本更快。在我的测试数据库中找到四个单词,LIKE仍然要快得多。它还具有ANSI标准SQL的优点,因此您可以在任何数据库上使用它。

如果这是一个常见的查询,您还应该考虑全文索引。