SELECT * FROM items WHERE caption LIKE 'name%' AND type = 'private' OR owner LIKE 'name%' type = 'private' ORDER BY uses DESC LIMIT 40;
可能的键:items_caption,items_owner,items_type
键:items_uses
(通过使用explain命令获得这些信息)
该查询大约需要1.8秒的时间,并且表中有超过一百万条记录.我不知道如何为该查询创建索引,并且无法控制源,因此无法修改查询.
解决方法:
既然您已经选择了*,就无法真正进行覆盖索引,但是可以对(caption,type)和(owner,type)进行一对复合索引.
ALTER TABLE items ADD INDEX (caption, type);
ALTER TABLE items ADD INDEX (owner, type);
这应该减少内部点查找.
我认为您不需要全文搜索,因为与LIKE进行比较的值不是以通配符(%)开头.与不以%开头的字符串进行比较的喜欢可以使用传统的快速b树索引.如果像“%name”中那样在LIKE开头有一个%,则不是这种情况.
另外,请不要忘记搜索条件:
caption LIKE ‘name%’ AND type = ‘private’
要么
owner LIKE ‘name%’ AND type = ‘private’
因此,如果caption子句失败并且尝试按所有者和类型进行查找,那么“ ADD FULLTEXT(caption,owner)”将无济于事.