我应该在该查询中使用哪些mysql索引?

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)”将无济于事.

上一篇:PHP MySQL-获取特定行的索引


下一篇:MySQL加速左外部联接/检查空查询