1

优化SQL语句

数据库应用程序的核心逻辑是通过SQL语句执行的,无论是直接通过解释器发出,还是通过API在后台提交。本节中的调优指南有助于加快各种MySQL应用程序的速度,这些指导原则包括读取和写入数据的SQL操作、通常SQL操作的幕后开销以及在特定场景(如数据库监视)中使用的操作。

优化SELECT语句

SELECT语句的形式的查询执行数据库中的所有查找操作,优化这些语句是首要任务,无论是为动态web页面实现次秒级响应时间,还是缩短生成大型夜间报告的时间。

除了SELECT语句外,查询的调优技术还适用于CREATE TABLE...AS SELECTINSERT INTO...SELECT的构造,以及DELETE语句中的WHERE子句,这些语句具有额外的性能考虑,因为它们将写操作与面向读取的查询操作结合起来。

NDB集群支持连接下推优化,其中符合条件的连接被完整地发送到NDB集群数据节点,可以在节点之间分布并并行执行。

优化查询的主要考虑因素是:

  • 要使缓慢的SELECT ... WHERE查询更快,首先要检查的是是否可以添加索引,在WHERE子句中使用的列上设置索引,以加快计算、筛选和最终检索结果的速度,为了避免浪费磁盘空间,构造一小组索引来加快应用程序中使用的许多相关查询。

    索引对于引用不同表的查询尤其重要,这些查询使用连接和外键等特性,你可以使用EXPLAIN语句来确定将哪些索引用于SELECT

  • 隔离和调优查询的任何部分,例如一个函数调用,这会花费过多的时间。根据查询的结构,可以对结果集中的每一行调用一个函数,甚至对表中的每一行调用一个函数,这极大地提高了效率。
  • 尽量减少查询中全表扫描的次数,特别是对于大表。
  • 通过定期使用ANALYZE TABLE语句使表统计信息保持最新,这样优化器就有了构建有效执行计划所需的信息。
  • 学习与每个表的存储引擎相关的调优技术、索引技术和配置参数,InnoDBMyISAM都有一套指导原则来支持和维持查询的高性能。
  • InnoDB表优化单查询事务。
  • 避免以难以理解的方式转换查询,特别是当优化器自动执行某些相同的转换时。
  • 如果某个基本准则不能很容易地解决性能问题,那么通过阅读EXPLAIN计划并调整索引、WHERE子句、join子句等,研究特定查询的内部细节。
  • 调整MySQL用于缓存的内存区域的大小和属性,由于有效地使用了InnoDB缓冲池、MyISAM键缓存和MySQL查询缓存,重复查询运行得更快,因为结果是在第二次和以后的时间从内存中检索的。
  • 即使对于使用缓存内存区域快速运行的查询,你也可以进行进一步优化,使它们所需的缓存内存更少,从而使应用程序更具可伸缩性。可伸缩性意味着你的应用程序可以同时处理更多的用户、更大的请求,等等,而不会出现性能的大幅下降。
  • 处理锁定问题,你的查询速度可能会受到同时访问表的其他会话的影响。

上一篇:优化概述

博弈
2.5k 声望1.5k 粉丝

态度决定一切