1、优化数据访问
大部分性能低下的查询都可以通过减少访问的数据量的方式进行优化。对于低效的查询,通过下面两个步骤来分析:
(1)、确认应用程序是否在检索大量超过需要的数据。这通常意味着访问了太多的行,但有时候也可能是访问了太多的列。
(2)、确认Mysql服务器层是否在分析大量超过需要的数据行。
1.1、是否向数据库请求了不需要的数据
有些查询会请求超过实际需要的数据,然后这些多余的数据会被应用程序丢弃。这会给Mysql服务器带来额外的负担,并增加网络开销,另外也会消耗应用服务器的CPU和内存资源。
(1)、查询不需要的记录:一个常见的错误是常常会误以为Mysql会只返回需要的数据,实际上Mysql却是先返回全部结果集再进行计算。一部分用户先使用SELECT语句查询大量的结果,然后获取前面的N行后关闭结果集,它们会认为Mysql会执行查询,并只返回它们需要的数据,然后停止查询。实际情况是Mysql会查询出全部的结果集,客户端的应用程序会接受全部的结果集数据,然后抛弃其中大部分数据。最简单有效的解决方法就是在这样的查询后面加上LIMIT。
(2)、多表关联时返回全部列
(3)、总是取出全部列:取出全部列,会让优化器无法完成索引覆盖扫描这类优化,还会为服务器带来额外的IO、内存和CPU的消耗。
(4)、重复查询相同的数据