标题: MySQL数据库优化中要用到哪些语句? [打印本页] 作者: IT民工 时间: 2010-5-12 13:39 标题: MySQL数据库优化中要用到哪些语句? 以下的文章主要介绍的是MySQL数据库优化的实际操作以及相关推荐,前面我们也讲过一些相关的优化操作策略,我们今天就一起来看看MySQL数据库优化中Group BY 语句、 Order By语句 等。
优化GROUP BY语句
默认情况下,MySQL对所有GROUP BY col1,col2...的字段进行排序。这与在查询中指定ORDER BY col1,col2...类似。因此,如果显式包括一个包含相同的列的ORDER BY子句,则对MySQL的实际执行性能没有什么影响。 如果查询包括GROUP BY 但用户想要避免排序结果的消耗,则可以指定ORDER By NULL禁止排序,例如:
引用
explain select id, sum(moneys) from sales2 group by id \G explain select id, sum(moneys) from sales2 group by id order by null \G
你可以通过比较发现第一条语句会比第二句在Extra:里面多了Using filesort.而恰恰filesort是最耗时的。
MySQL数据库优化ORDER BY语句
在某些情况中,MySQL可以使用一个索引来满足ORDER BY子句,而不需要额外的排序。WHERE 条件和 ORDER BY使用相同的索引,并且ORDER BY的顺序和索引顺序相同,并且ORDER BY的字段都是升序或者都是降序。
例如:
引用
SELECT * FROM t1 ORDER BY key_part1,key_part2,....: SELECT * FROM t1 WHERE key_part1 = 1 ORDER BY key_part1 DESC,key_part2 DESC; SELECT * FROM t1 ORDER BY key_part1 DESC, key_part2 DESC; 但是以下的情况不使用索引:
引用
SELECT * FROM t1 ORDER BY key_part1 DESC, key_part2 ASC; ORDER by的字段混合ASC 和 DESC
SELECT * FROM t1 WHERE key2=constant ORDER BY key1; 用于查询行的关键字与ORDER BY 中所使用的不相同
SELECT * FROM t1 ORDER BY key1, key2; 对不同的关键字使用ORDER BY
explain select * from sales2 where company_id not in(select id from company2) \G explain select * from sales2 left join comany2 on sales2.company_id = company2.id where sales2.company_id is null \G;