- 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截然不同的优化
- 8.2.1.19限制查询优化
- 8.2.1.20函数调用优化
- 8.2.1.21窗口函数优化
- 8.2.1.22行构造函数表达式优化
- 8.2.1.23避免扫描全表
的形式的查询选择
语句,执行数据库中的所有查找操作。优化这些语句是最优先考虑的,无论是为动态网页实现亚秒级的响应时间,还是为生成庞大的夜间报告而减少数小时的时间。
除了选择
语句,查询的调优技术也适用于诸如创建表……作为选择
,插入…选择
,在哪里
条款删除
语句。这些语句具有额外的性能考虑因素,因为它们将写操作与面向读的查询操作结合在一起。
NDB Cluster支持一种join下推优化,通过这种优化,一个合格的join将被整体发送到NDB Cluster数据节点,在这些节点中,它可以被分布并并行执行。有关此优化的更多信息,请参见NDB下推连接的条件.
优化查询的主要考虑事项是:
使…变慢
选择……在哪里
查询更快,首先要检查的是是否可以添加指数.控件中使用的列上设置索引在哪里
子句,以加速结果的评估、过滤和最终检索。为了避免浪费磁盘空间,可以构造一组索引来加速应用程序中使用的许多相关查询。索引对于引用不同表的查询尤其重要,使用的特性包括连接和外键.你可以使用
解释
语句确定哪些索引用于选择
.看到8.3.1节,“MySQL如何使用索引”和第8.8.1节,“使用EXPLAIN优化查询”.隔离和调优查询的任何部分,例如函数调用,它需要花费过多的时间。根据查询的结构,可以对结果集中的每一行调用一次函数,甚至可以对表中的每一行调用一次函数,这将极大地放大效率。
尽量减少全表扫描在您的查询中,特别是对于大表。
属性保持表统计信息最新
分析表
语句,因此优化器拥有构建高效执行计划所需的信息。学习特定于每个表的存储引擎的调优技术、索引技术和配置参数。这两个
InnoDB
和MyISAM
拥有一组指导原则,用于在查询中启用和维持高性能。有关详细信息,请参见第8.5.6节,“优化InnoDB查询”和第8.6.1节,“优化MyISAM查询”.您可以优化单个查询事务
InnoDB
表格中使用的技术第8.5.3节,“优化InnoDB只读事务”.避免以难以理解的方式转换查询,特别是在优化器自动执行某些相同的转换时。
如果性能问题不能通过基本原则轻松解决,可以通过阅读
解释
计划并调整你的指数,在哪里
子句,连接子句,等等。(当你达到一定的专业水平,阅读解释
计划可能是解决每个问题的第一步。)调整MySQL用于缓存的内存区域的大小和属性。高效利用
InnoDB
缓冲池,MyISAM
键缓存和MySQL查询缓存,重复查询运行得更快,因为结果在第二次和以后的时间从内存中检索。甚至对于使用缓存内存区域快速运行的查询,您仍然可以进一步优化,使它们需要更少的缓存内存,使应用程序更具伸缩性。可伸缩性意味着您的应用程序可以处理更多的并发用户、更大的请求等等,而不会经历性能的大幅下降。
处理锁定问题,其中查询的速度可能会受到同时访问表的其他会话的影响。