8.2 Optimizing SQL Statements SQL优化:
8.2.1 Optimizing SELECT Statements 优化SELECT 语句
8.2.2 Optimizing DML Statements 优化DML语句
8.2.3 Optimizing Database Privileges 优化数据库权限
8.2.4 Optimizing INFORMATION_SCHEMA Queries INFORMATION_SCHEMA 查询
8.2.5 Other Optimization Tips 其他优化技巧
一个数据库的核心逻辑是通过SQL语句执行,是否直接通过一个解释器或者通过API提交执行。
在这段调整的指导方针是有助于加快所有类型的MySQL 应用。该指南覆盖SQL操作 读和写数据.
8.2.1 Optimizing SELECT Statements 优化SELECT 语句
[+/-]
8.2.1.1 Speed of SELECT Statements 加速SELECT 语句
8.2.1.2 How MySQL Optimizes WHERE Clauses MySQL如何优化WHERE 子句
8.2.1.3 Range Optimization Range 优化
8.2.1.4 Index Merge Optimization Index Merge 优化
8.2.1.5 Engine Condition Pushdown Optimization 引擎条件内推
8.2.1.6 Index Condition Pushdown Optimization
8.2.1.7 Use of Index Extensions
8.2.1.8 IS NULL Optimization
8.2.1.9 LEFT JOIN and RIGHT JOIN Optimization
8.2.1.10 Nested-Loop Join Algorithms
8.2.1.11 Nested Join Optimization
8.2.1.12 Outer Join Simplification
8.2.1.13 Multi-Range Read Optimization
8.2.1.14 Block Nested-Loop and Batched Key Access Joins
8.2.1.15 ORDER BY Optimization
8.2.1.16 GROUP BY Optimization
8.2.1.17 DISTINCT Optimization
8.2.1.18 Subquery Optimization
8.2.1.19 Optimizing LIMIT Queries
8.2.1.20 How to Avoid Full Table Scans
查询, 以SELECT 语句的形式,执行所有的查找操作在数据库里, 调优这些语句是主要任务,
无论是实现2次响应次数用于动态web页面,或者花费数个小时产生的巨大的隔夜报告。
除了选项语句, 调优技术用于查询也适用于比如CREATE TABLE .. AS SELECT,
INSERT INTO .. SELECT, 和where 子句在DELETE 语句。这些语句有额外的性能考虑,
因为他们将写操作和读操作连接起来。
8.2.1.1 Speed of SELECT Statements 加速SELECT 语句:
优化查询主要的考虑因素是:
为了让一个慢的SELECT … WHERE 查询更快, 第一件事情是你是否添加一个索引.
在where 子句中设置索引,来加快评估,过滤和最终的检索结果。
为了避免浪费磁盘空间,构建一个小的索引来加速相关查询。
索引是特别重要的对于查询关联不同的表, 使用功能比如一个jons和一个外键。
你可以使用EXPLAIN 语句来确定哪个索引用于SELECT
隔离和调整 查询的任何部分, 比如一个函数调用,这需要花费过多非时间。
依赖 查询是如何构造的,一个函数可以被调用1次对于结果集中的每个行,
甚至表中的每一行,大大增加了任何低效率的。
在你的查询中,最大限度地减少全表扫描,特别是大表的全表扫描。
保持表统计信息更新,通过使用ANALYZE TABLE 语句定期的,
因此优化器需要统计信息来构造一个高效的执行计划。
学习调优技术,索引技术,配置参数对每个表指定一个存储引擎,
InnoDB和MyISAM 都有支持高性能的查询。
特别是, 在MySQL 5.6.4和以后,你可以优化单个查询交易。
为了避免查询转换为其他难以理解的方式, 尤其是如果优化器自动的进行一些相同的转换。
如果一个性能问题是不容易解决的, 调查指定的查询计划了解内部细节来调整索引,
where 子句,join cluses,等等(当你达到一定的专业知识,阅读执行计划可能是你的第一步)
调整内存区域,MySQL使用的缓存的大小。随着InnoDB buffer pool 的有效使用,
MyISAM key cache, MySQL query cache,重复查询运行的更快 因为结果是从内存检索的 。
即使对使用cache memory 曲剧进行快速的查询, 你还可以进一步优化,以使它们需要更少的cache memory,
让你的应用变的可伸缩,可伸缩性意味着你的应用可以处理更多的并发用户,大的请求 。