当我在我的网站上搜索时,我想搜索三列搜索短语。因为我不想搜索“John”来返回“Johnson”,所以我目前使用带有字边界的RLIKE。但是,我的表有超过400,000行,这个查询非常慢。谁能想到更快的方法来做同样的事情呢?
这是我的问题:
SELECT * FROM mytable
WHERE (
(accountholder RLIKE '[[:<:]]John[[:>:]]')
OR (alternatename RLIKE '[[:<:]]John[[:>:]]')
OR (payeename RLIKE '[[:<:]]John[[:>:]]')
);
答案 0 :(得分:2)
如果您要搜索整个单词,更好的解决方案是使用FULLTEXT索引。所以,你的表必须是MyISAM(如果不是,创建一个只用于搜索的表,并在那个和你的表之间建立关系)...然后,在你要搜索的列上创建FULLTEXT索引,并进行如下查询:
SELECT * FROM mytable WHERE MATCH (accountholder, alternatename, payeename)
AGAINST ('+John' IN BOOLEAN MODE);
......这将真正提升你的表现。
你可以找到一个好的开始here。