查询数据库的一个指导原则是尽可能地在1个查询中进行分割,而不是将其拆分。因为即使它会导致很少的连接,查询优化器也会优化它。
然后我注意到一个查询导致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
缩短时间缩短到几毫秒。
我有[{1}}的{{1}}外键,并且提到了除a.d
唯一索引的列,两个表都有大约2 mil行,我使用c.e
和a.b
。
它真的是指南的问题还是我理解错了?
答案 0 :(得分:2)
还要记住,您可以通过查询缓存,操作系统调整等其他方式提高性能:http://forge.mysql.com/wiki/Top10SQLPerformanceTips