有传言说,这个:性能正则表达式的VS LIKE在MySQL查询
SELECT * FROM lineage_string where lineage like '%179%' and lineage regexp '(^|/)179(/|$)'
会比这个速度更快:
SELECT * FROM lineage_string where lineage regexp '(^|/)179(/|$)'
谁能证实?或者知道一个体面的方式来测试这种查询的速度。 谢谢
有传言说,这个:性能正则表达式的VS LIKE在MySQL查询
SELECT * FROM lineage_string where lineage like '%179%' and lineage regexp '(^|/)179(/|$)'
会比这个速度更快:
SELECT * FROM lineage_string where lineage regexp '(^|/)179(/|$)'
谁能证实?或者知道一个体面的方式来测试这种查询的速度。 谢谢
它可能会更快,因为可以更快速地评估LIKE条件,然后正则表达式,因此如果大多数行失败,测试可能会更快。但是,如果大多数行都成功了,那么它将会变慢,因为必须为成功的行而不是仅仅一次运行两个测试。它也取决于优化器选择先运行哪个表达式。
一个更大的加速可以,如果你有这样的事情被目击:
SELECT * FROM (
SELECT * FROM lineage_string
WHERE lineage LIKE '179%'
) WHERE lineage regexp '^179(/|$)'
现在的指数可以用来寻找可能行,因为LIKE“179%”是sargable。许多行根本不需要检查。
一如既往,最好的方法就是根据您的实际数据自行测量。
是的,它可能会快一点点,因为标准SQL LIKE
比完整正则表达式解析器更简单的比较操作。
但是,实际上两者都很慢,因为它们都不能使用索引。 (LIKE
可以使用索引如果匹配字符串不是以一个通配符开始,但这里并非如此。)
如果您担心速度,你应该改变你的架构,这样就可以直接把179
在列和索引中,而不必在每一行上手动检查字符串。
根据这个不太受支持的博客文章,LIKE比REGEXP快10倍(数据可能有所不同,索引使用上没有任何字词等):http://thingsilearn.wordpress.com/2008/02/28/mysql-query -speed-regexp-vs-like/ – 2010-04-29 19:14:23
额外的链接 - 同样的故事,LIKE更快:http://lists.mysql.com/mysql/101728 – 2010-04-29 19:16:26
它'TEXT'和'VARCHAR'字段肯定更快我试过了上。我记得在博客评论中看到** REGEXP **对于'UNSIGNED'字段比** LIKE **快,但我无法证实这一点。 – inhan 2012-08-16 03:24:54