MySQL Server version: 5.0.95
Tables All: InnoDB
我遇到 MySQL 数据库查询问题。基本上我发现如果我索引一个特定的 varchar(50) 字段tag.name,我的查询比不索引字段花费的时间更长(x10)。我正在尝试加快这个查询的速度,但是我的努力似乎适得其反。
罪魁祸首似乎是:
WHERE `t`.`name` IN ('news','home')
我注意到如果我查询tag
直接使用相同的条件进行表连接,并且对名称字段进行索引,我没有问题。它实际上按预期工作得更快。
示例查询**
看来article_id是文章表的主键。
由于您按article_id分组,MySQL需要按该列按顺序返回记录,以便执行GROUP BY。
可以看到,如果没有索引,它会扫描article表中的所有记录,但它们至少是按article_id排序的,因此不需要稍后排序。这里可以应用LIMIT优化,因为它已经是有序的,它可以在得到五行后停止。
在 tag.name 上有索引的查询中,它不是扫描整个文章表,而是利用索引,但针对标签表,并从那里开始。不幸的是,执行此操作时,稍后必须按article.article_id 对记录进行排序才能完成GROUP BY 子句。无法应用 LIMIT 优化,因为它必须返回整个结果集,然后对其进行排序,才能获取前 5 行。
在这种情况下,MySQL 只是猜测错误。
如果没有 LIMIT 子句,我猜测使用索引会更快,这可能就是 MySQL 的猜测。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)