- 8.2.1.1 WHERE子句优化
- 8.2.1.2范围优化
- 8.2.1.3索引合并优化
- 8.2.1.4哈希联接优化
- 8.2.1.5发动机状态下推优化
- 8.2.1.6索引条件下推优化
- 8.2.1.7嵌套循环联接算法
- 8.2.1.8嵌套联接优化
- 8.2.1.9外部联接优化
- 8.2.1.10外部联接简化
- 8.2.1.11多范围读取优化
- 8.2.1.12块嵌套循环和批处理密钥访问联接
- 8.2.1.13条件过滤
- 8.2.1.14恒定折叠优化
- 8.2.1.15 IS NULL优化
- 8.2.1.16通过优化进行排序
- 8.2.1.17按优化分组
- 8.2.1.18 DISTINCT优化
- 8.2.1.19 LIMIT查询优化
- 8.2.1.20函数调用优化
- 8.2.1.21窗口功能优化
- 8.2.1.22行构造器表达式优化
- 8.2.1.23避免全表扫描
查询以SELECT 语句的形式执行数据库中的所有查找操作。无论是实现动态网页的亚秒级响应时间,还是缩短时间以生成大量的隔夜报告,调整这些语句都是当务之急。
此外SELECT语句,进行查询调谐技术也适用于结构,如 CREATE TABLE...AS SELECT, INSERT INTO...SELECT和WHERE在条款 DELETE的语句。这些语句还有其他性能方面的考虑,因为它们将写操作与面向读取的查询操作结合在一起。
NDB Cluster支持联接下推优化,从而将符合条件的联接完整地发送到NDB Cluster数据节点,在该节点之间可以将其分布并并行执行。有关此优化的更多信息,请参见 NDB下推连接的条件。
优化查询的主要考虑因素是:
-
为了使慢速
SELECT ... WHERE查询更快,首先要检查的是是否可以添加 索引。在WHERE子句中使用的列上设置索引,以加快评估,过滤和最终检索结果的速度。为避免浪费磁盘空间,请构造一小组索引,以加快应用程序中使用的许多相关查询的速度。对于使用联接和 外键之类的功能引用不同表的查询,索引尤为重要 。您可以使用该
EXPLAIN语句来确定用于的索引SELECT。请参见 第8.3.1节“ MySQL如何使用索引”和 第8.8.1节“使用EXPLAIN优化查询”。 -
隔离和调整查询中花费时间过多的任何部分,例如函数调用。根据查询的结构方式,可以对结果集中的每一行调用一次函数,甚至可以对表中的每一行调用一次函数,从而极大地提高了效率。
-
最小化 查询中全表扫描的次数 ,特别是对于大表。
-
通过
ANALYZE TABLE定期使用该语句来使表统计信息保持最新 ,因此优化器具有构造有效执行计划所需的信息。 -
了解每个表的存储引擎特定的调整技术,索引技术和配置参数。双方
InnoDB并MyISAM有两套准则的实现和维持查询高性能。有关详细信息,请参见第8.5.6节“优化InnoDB查询”和 第8.6.1节“优化MyISAM查询”。 -
您可以
InnoDB使用第8.5.3节“优化InnoDB只读事务”中的技术优化表的 单查询事务 。 -
避免以难以理解的方式转换查询,尤其是在优化程序自动执行某些相同转换的情况下。
-
如果使用基本准则之一不能轻松解决性能问题,请通过阅读
EXPLAIN计划并调整索引,WHERE子句,连接子句等来调查特定查询的内部详细信息 。(当您达到一定的专业水平时,阅读EXPLAIN计划可能是每个查询的第一步。) -
调整MySQL用于缓存的内存区域的大小和属性。由于有效地使用了
InnoDB缓冲池,MyISAM键高速缓存和MySQL查询高速缓存,重复查询的运行速度更快,因为第二次及以后都从内存中检索了结果。 -
即使对于使用缓存区域快速运行的查询,您仍可能会进一步优化,以使它们需要更少的缓存,从而使您的应用程序更具可伸缩性。可伸缩性意味着您的应用程序可以处理更多的同时用户,更大的请求等,而不会导致性能大幅下降。
-
处理锁定问题,其中其他会话同时访问表可能会影响查询速度。




