在MySQL中进行模式匹配的有效方法是什么?
我们在一个查询中有一个巨大的模式匹配(需要检查大约12个字符串)。 现在我必须在MySQL中执行此查询,但是来自PostgreSQL的查询似乎没有相同的语法 来自PostgreSQL:在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中高效地实现这一点?我知道,这可能根本没有效率。最有效的方法是什么 这确实是一个技巧,但可能是最糟糕的查询:
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%。这可能因支票数量而异。感谢您提供的所有附加信息!