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

在MySQL中进行模式匹配的有效方法是什么?,mysql,postgresql,performance,pattern-matching,sql-like,Mysql,Postgresql,Performance,Pattern Matching,Sql Like,我们在一个查询中有一个巨大的模式匹配(需要检查大约12个字符串)。 现在我必须在MySQL中执行此查询,但是来自PostgreSQL的查询似乎没有相同的语法 来自PostgreSQL: SELECT value FROM ... WHERE ... AND `value` !~* '.*(text|text2|text3|text4|text5).*'; 如何在MySQL中高效地实现这一点?我知道,这可能根本没有效率。最有效的方法是什么 这确实是一个技巧,但可能是最糟糕的查询:

我们在一个查询中有一个巨大的模式匹配(需要检查大约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是这里的路吗?然后我必须找出相应的表达式。

是,
REGEXP
或其替代拼写
RLIKE

WHERE value NOT RLIKE 'text|text2|text3|text4|text5'
(除非显式使用
^
$
,否则regexp匹配不会锚定到字符串的末尾,因此不需要
*(…).

您应该测试它,看看它是否真的比
LIKE
的版本快。在我要查找四个单词的测试数据库中,
LIKE
仍然要快得多。它还具有ANSI标准SQL的优点,因此您可以在任何数据库上使用它

如果这是一个常见的查询,你也应该考虑FultLeXT索引。在这种情况下,不(类似或类似或类似…)比不喜欢的快50%。这可能因支票数量而异。感谢您提供的所有附加信息!