Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 Reference Manual  /  ...  /  Optimizing SELECT Statements

10.2.1 选择语句优化

查询语句,形式为SELECT语句,执行数据库中的所有查找操作。优化这些语句是优先级最高的,是否以秒级响应时间为动态网页,或者将小时减少到生成大型夜间报告的时间。

除了SELECT语句外,查询优化技巧也适用于构造如CREATE TABLE...AS SELECTINSERT INTO...SELECTWHERE子句在DELETE语句中。这些语句在组合写操作与读取操作时有额外的性能考虑。

NDB集群支持join推送优化,可以将符合条件的join发送到NDB集群数据节点上,并在其中分布和并行执行。关于这项优化的更多信息,请参见NDB推送join条件

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

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

    索引对查询特别重要,尤其是在引用不同表的查询中,使用特性如joinforeign key。可以使用EXPLAIN语句来确定哪些索引用于一个SELECT语句。请参见Section 10.3.1,“MySQL如何使用索引”Section 10.8.1,“使用EXPLAIN优化查询”

  • 孤立并优化查询中的任何部分,例如函数调用,那么该函数可能会在结果集中的每一行或每一行表中被调用,从而大大增加任何不效率。

  • 尽量减少查询中的全表扫描,特别是对于大表。

  • 定期使用ANALYZE TABLE语句来保持表统计信息的最新,以便优化器可以构建一个高效的执行计划。

  • 学习存储引擎特定的优化技术、索引技术和配置参数。Both InnoDBMyISAM 都有优化查询的指南。详细信息,请见第10.5.6节,“优化 InnoDB 查询”第10.6.1节,“优化 MyISAM 查询”

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

  • 避免将查询转换为难以理解的形式,特别是优化器可能自动执行的相同转换。

  • 如果性能问题无法通过基本指南解决,调查查询的内部细节,阅读EXPLAIN计划,并调整索引、WHERE子句、连接子句等。

  • 调整 MySQL 使用的内存缓存大小和属性。使用高效的InnoDB 缓冲池MyISAM键缓存和 MySQL 查询缓存,可以提高重复查询的速度,因为结果可以从内存中快速获取。

  • 即使使用缓存内存区域的查询速度很快,您可能还需要进一步优化,以便它们需要更少的缓存内存,使您的应用程序更加可扩展。可扩展性意味着您的应用程序可以处理更多的同时用户、更大的请求等,而不需要性能下降。

  • 解决锁定问题,查询速度可能受到其他会话访问同一表的影响。