MySQL regexp比想象的慢很多

时间:2012-03-09 05:42:56

标签: mysql sql full-text-search

SELECT data 
  FROM test 
 WHERE col REGEXP "asdf_[0-9]+" 
 LIMIT 1

...... 1排(1分43.12秒)

SELECT data 
  FROM test 
 WHERE col LIKE "asdf_%" 
 LIMIT 1

...... 1行(0.01秒)

regexp可以给我确切的结果,如果我使用like sql,我必须过滤数据。有什么方法可以改善吗?

BTW:测试有200万行并且长大了。

1 个答案:

答案 0 :(得分:4)

尝试将regexp字符串更改为"^asdf_[0-9]+"

LIKE已锚定(即LIKE 'asdf_%'表示“以asdf_开头的字符串”,而REGEXP不是(REGEXP 'asdf_[0-9]+'在字符串中的任何位置查找)。

请注意,执行REGEXP 'asdf_[0-9]+'就像说LIKE '%asdf_%'

我认为REGEXP仍然会比LIKE慢一点,但希望线锚的开始会大大加快速度。