- 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 ORDER BY优化
- 8.2.1.17 GROUP BY优化
- 8.2.1.18截然不同的优化
- 8.2.1.19 LIMIT查询优化
- 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查询缓存,重复查询运行得更快,因为结果是第二次和后续次从内存中检索的。即使对于使用缓存内存区域运行速度很快的查询,您仍然可以进一步优化,以便它们需要更少的缓存内存,从而使应用程序更具可伸缩性。可伸缩性意味着您的应用程序可以处理更多的同时用户、更大的请求等等,而不会有很大的性能下降。
处理锁定问题,即查询的速度可能会受到同时访问表的其他会话的影响。