1、优化SQL语句概述
数据库应用程序的核心逻辑是通过SQL语句执行的,无论是直接通过解释器发布还是通过API在幕后提交。调优准则则是有助于加速各种MySQL应用程序。这些指导原则涵盖了读取和写入数据的SQL操作,SQL操作的幕后开销以及特定场景(如数据库监控)中使用的操作。
2、select语句的优化
2.1 以SELECT 语句形式的查询执行数据库中的所有查找操作。无论在实现动态网页的亚秒响应时间还是缩短产生大量隔夜报告的时间,调整这些语句是首要任务。
2.2 此外SELECT语句,进行查询调优技术也适用于诸如 CREATE TABLE...AS SELECT, INSERT INTO...SELECT和在DELETE语句中的WHERE在条件等结构。这些语句具有额外的性能考虑,因为它们将写操作与面向读取的查询操作结合在一起。
2.3 优化查询的要数主要是:
★ 为了使SELECT ... WHERE加快查询速度,首先要检查的是您是否可以添加索引。在WHERE子句中使用的列上设置索引,以加速评估,筛选和最终检索结果。为了避免浪费磁盘空间,构建一组索引,以加快应用程序中使用的许多相关查询。在正在使用可以使用连接(jion)和外键(foreign key)等功能引用不同表的查询,索引尤其重要。这里可以使用EXPLAIN语句来确定一个SELECT是否被使用。后续会展开索引以及exlain的使用。
★ 隔离并调整查询的任何部分,例如会花费过多的时间函数调用。根据查询结构的不同,结果集中的每一行可能调用一次函数,甚至表中的每一行调用一次函数,从而大大放大任何低效率。
★ 尽量减少查询中全表扫描的次数 ,特别是对于大表格。
★ 通过ANALYZE TABLE定期使用语句来保持表的统计数据是最新的 ,以便优化器具有构建高效执行计划所需的信息。
★ 了解特定于每个表的存储引擎的调整技术,索引技术和配置参数。InnoDB和MyISAM有实现和维持查询高性能的准则集合。后续会展开!
★ 单查询事务的InnoDB 表可以使用InnoDB只读事务优化技术进行优化
★ 避免以难以理解的方式转换查询,特别是如果优化器自动执行一些相同的转换。
★ 如果性能问题不能通过基本准则之一轻易解决,请通过阅读EXPLAIN计划并调整索引,WHERE子句,连接子句等来调查特定查询的内部详细信息 。(阅读 EXPLAIN计划可能是您每次查询的第一步。)
★ 调整MySQL用于缓存的内存区域的大小和属性。通过高效地使用 InnoDB 缓冲池, MyISAM密钥缓存和MySQL查询缓存,因为第二次和随后都会从内存中检索结果,重复查询运行速度会更快。
★ 即使对于使用高速缓存区快速运行的查询,您仍可能进一步优化,以便它们需要更少的高速缓存内存,从而使您的应用程序更具可扩展性。可扩展性意味着您的应用程序可以同时处理更多的用户,更大的请求等等,而不会出现性能大幅下降的情况。
★ 处理锁定问题,其中查询速度可能会受到其他会话同时访问表的影响。