文档首页
MySQL 9.0 参考手册
相关文档 下载本手册
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
手册页 (TGZ) - 258.2Kb
手册页 (Zip) - 365.3Kb
信息 (Gzip) - 4.0Mb
信息 (Zip) - 4.0Mb


MySQL 9.0 参考手册  /  ...  /  优化 SELECT 语句

10.2.1 优化 SELECT 语句

查询以 SELECT 语句的形式执行数据库中的所有查找操作。调整这些语句是首要任务,无论是为动态网页实现亚秒级响应时间,还是将生成大量隔夜报表的时间缩短数小时。

除了 SELECT 语句之外,查询的调整技术也适用于诸如 CREATE TABLE...AS SELECTINSERT INTO...SELECTDELETE 语句中的 WHERE 子句等结构。这些语句还有其他性能方面的考虑因素,因为它们将写操作与面向读取的查询操作相结合。

NDB 集群支持连接下推优化,通过该优化,符合条件的连接会完整地发送到 NDB 集群数据节点,在这些节点上,连接可以分发并在它们之间并行执行。有关此优化的更多信息,请参阅NDB 下推连接的条件

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

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

    索引对于引用不同表的查询尤其重要,例如使用连接外键等功能。您可以使用 EXPLAIN 语句来确定 SELECT 使用了哪些索引。请参阅第 10.3.1 节“MySQL 如何使用索引”第 10.8.1 节“使用 EXPLAIN 优化查询”

  • 隔离并调整查询中任何占用过多时间的部件,例如函数调用。根据查询的结构,可以为结果集中的每一行调用一次函数,甚至为表中的每一行调用一次函数,这将大大增加任何低效率。

  • 最大程度地减少查询中的全表扫描次数,尤其是对于大型表。

  • 定期使用 ANALYZE TABLE 语句更新表统计信息,以便优化器获得构建高效执行计划所需的信息。

  • 了解针对每个表的存储引擎特有的调整技术、索引技术和配置参数。InnoDBMyISAM 都有一套指南,用于在查询中启用和维持高性能。有关详细信息,请参阅第 10.5.6 节 “优化 InnoDB 查询”第 10.6.1 节 “优化 MyISAM 查询”

  • 您可以使用第 10.5.3 节 “优化 InnoDB 只读事务”中的技术优化 InnoDB 表的单查询事务。

  • 避免以难以理解的方式转换查询,尤其是在优化器自动执行某些相同转换的情况下。

  • 如果性能问题不容易通过其中一项基本指南解决,请通过阅读EXPLAIN 计划并调整索引、WHERE 子句、联接子句等来调查特定查询的内部细节。(当您达到一定程度的专业知识时,阅读EXPLAIN 计划可能是您对每个查询的第一步。)

  • 调整 MySQL 用于缓存的内存区域的大小和属性。通过有效使用 InnoDB 缓冲池MyISAM 键缓存和 MySQL 查询缓存,重复查询的运行速度更快,因为结果在第二次和后续时间从内存中检索。

  • 即使是使用缓存内存区域快速运行的查询,您仍然可以进一步优化,以便它们需要更少的缓存内存,从而使您的应用程序更具可扩展性。可扩展性意味着您的应用程序可以处理更多并发用户、更大请求等,而不会遇到性能大幅下降。

  • 处理锁定问题,其中查询的速度可能会受到同时访问表的其他会话的影响。