查询数据库的准则之一是在一个查询中尽最大努力,而不是拆分它,因为即使它会导致很少的连接,查询优化器也会优化它。
然后我注意到一个查询结果1行花费了1.5秒,我检查了为什么会这样。
查询如下所示
SELECT a.b FROM a, c WHERE a.d = c.e AND c.f = 'g'虽然我知道c.f = 'g'匹配一行,但我认为正如指南所说,查询优化器会捕获它。但事实并非如此。
将其拆分为两个查询,第一个查询检索c.e,第二个查询检索a.b,将时间缩短到几毫秒。我有c.e的a.d外键和,提到的除了a.b唯一索引的列,这两个表都有大约2mil的行,我使用MySQL和InnoDB。
是指南真的有问题,还是我理解错了?
发布于 2011-01-16 08:51:43
http://dev.mysql.com/tech-resources/articles/using-new-query-profiler.html还应考虑是否在a.d、c.e、c.f上提供索引
还要记住,您还可以通过其他方式提高性能,如查询缓存、操作系统调优等:http://forge.mysql.com/wiki/Top10SQLPerformanceTips
https://stackoverflow.com/questions/4702598
复制相似问题