如何优化当前使用带有字边界的RLIKE的查询?

时间:2012-03-06 02:40:13

标签: mysql sql database

当我在我的网站上搜索时,我想搜索三列搜索短语。因为我不想搜索“John”来返回“Johnson”,所以我目前使用带有字边界的RLIKE。但是,我的表有超过400,000行,这个查询非常慢。谁能想到更快的方法来做同样的事情呢?

这是我的问题:

SELECT * FROM mytable 
WHERE (
         (accountholder RLIKE '[[:<:]]John[[:>:]]') 
      OR (alternatename RLIKE '[[:<:]]John[[:>:]]')
      OR (payeename RLIKE '[[:<:]]John[[:>:]]')
);

1 个答案:

答案 0 :(得分:2)

如果您要搜索整个单词,更好的解决方案是使用FULLTEXT索引。所以,你的表必须是MyISAM(如果不是,创建一个只用于搜索的表,并在那个和你的表之间建立关系)...然后,在你要搜索的列上创建FULLTEXT索引,并进行如下查询:

SELECT * FROM mytable WHERE MATCH (accountholder, alternatename, payeename)
AGAINST ('+John' IN BOOLEAN MODE);

......这将真正提升你的表现。

你可以找到一个好的开始here