当我在我的网站上进行搜索时,我想在三列中搜索搜索短语。因为我不希望搜索"John“返回"Johnson",所以我目前使用带单词边界的RLIKE。但是,我的表有400,000多行,这个查询非常慢。有没有人能想出一种更快的方法来做同样的事情?
下面是我的问题:
SELECT * FROM mytable
WHERE (
(accountholder RLIKE '[[:<:]]John[[:>:]]')
OR (alternatename RLIKE '[[:<:]]John[[:>:]]')
OR (payeename RLIKE '[[:<:]]John[[:>:]]')
);
发布于 2012-03-06 14:22:47
如果你正在搜索一个完整的单词,更好的解决方案是使用全文索引。因此,您的表必须是MyISAM的(如果不是,则创建一个仅用于搜索的表,并在该表和您的表之间建立关系)...then,对要搜索的列创建全文索引,并进行如下查询:
SELECT * FROM mytable WHERE MATCH (accountholder, alternatename, payeename)
AGAINST ('+John' IN BOOLEAN MODE);
...that真的会提升你的表现。
你可以找到一个好的开始here。
https://stackoverflow.com/questions/9577184
复制相似问题