# 第 8 章 优化

**目录**

[8.1 优化概述](optimize-overview.html)
[8.2 优化 SQL 语句](statement-optimization.html)
[8.2.1 优化 SELECT 语句](select-optimization.html)
[8.2.2 优化子查询、派生表、视图引用和公用表表达式](subquery-optimization.html)
[8.2.3 优化信息\_SCHEMA 查询](information-schema-optimization.html)
[8.2.4 优化性能模式查询](performance-schema-optimization.html)
[8.2.5 优化数据变更语句](data-change-optimization.html)
[8.2.6 优化数据库权限](permission-optimization.html)
[8.2.7 其他优化技巧](miscellaneous-optimization-tips.html)
[8.3 优化和索引](optimization-indexes.html)
[8.3.1 MySQL 如何使用索引](mysql-indexes.html)
[8.3.2 主键优化](primary-key-optimization.html)
[8.3.3 SPATIAL 索引优化](spatial-index-optimization.html)
[8.3.4 外键优化](foreign-key-optimization.html)
[8.3.5 列索引](column-indexes.html)
[8.3.6 多列索引](multiple-column-indexes.html)
[8.3.7 验证索引使用情况](verifying-index-usage.html)
[8.3.8 InnoDB 和 MyISAM 索引统计收集](index-statistics.html)
[8.3.9 B-Tree和哈希索引的比较](index-btree-hash.html)
[8.3.10 索引扩展的使用](index-extensions.html)
[8.3.11 优化器使用生成的列索引](generated-column-index-optimizations.html)
[8.3.12 不可见索引](invisible-indexes.html)
[8.3.13 降序索引](descending-indexes.html)
[8.3.14 TIMESTAMP 列的索引查找](timestamp-lookups.html)
[8.4 优化数据库结构](optimizing-database-structure.html)
[8.4.1 优化数据大小](data-size.html)
[8.4.2 优化 MySQL 数据类型](optimize-data-types.html)
[8.4.3 多表优化](optimize-multi-tables.html)
[8.4.4 MySQL内部临时表的使用](internal-temporary-tables.html)
[8.4.5 数据库和表的数量限制](database-count-limit.html)
[8.4.6 表大小限制](table-size-limit.html)
[8.4.7 表列数和行大小的限制](column-count-limit.html)
[8.5 优化 InnoDB 表](optimizing-innodb.html)
[8.5.1 优化 InnoDB 表的存储布局](optimizing-innodb-storage-layout.html)
[8.5.2 优化 InnoDB 事务管理](optimizing-innodb-transaction-management.html)
[8.5.3 优化 InnoDB 只读事务](innodb-performance-ro-txn.html)
[8.5.4 优化 InnoDB 重做日志](optimizing-innodb-logging.html)
[8.5.5 InnoDB 表的批量数据加载](optimizing-innodb-bulk-data-loading.html)
[8.5.6 优化 InnoDB 查询](optimizing-innodb-queries.html)
[8.5.7 优化 InnoDB DDL 操作](optimizing-innodb-ddl-operations.html)
[8.5.8 优化 InnoDB 磁盘 I/O](optimizing-innodb-diskio.html)
[8.5.9 优化 InnoDB 配置变量](optimizing-innodb-configuration-variables.html)
[8.5.10 为具有许多表的系统优化 InnoDB](optimizing-innodb-many-tables.html)
[8.6 MyISAM 表的优化](optimizing-myisam.html)
[8.6.1 优化 MyISAM 查询](optimizing-queries-myisam.html)
[8.6.2 MyISAM 表的批量数据加载](optimizing-myisam-bulk-data-loading.html)
[8.6.3 优化 REPAIR TABLE 语句](repair-table-optimization.html)
[8.7 优化内存表](optimizing-memory-tables.html)
[8.8 了解查询执行计划](execution-plan-information.html)
[8.8.1 使用 EXPLAIN 优化查询](using-explain.html)
[8.8.2 解释输出格式](explain-output.html)
[8.8.3 扩展 EXPLAIN 输出格式](explain-extended.html)
[8.8.4 获取命名连接的执行计划信息](explain-for-connection.html)
[8.8.5 估计查询性能](estimating-performance.html)
[8.9 控制查询优化器](controlling-optimizer.html)
[8.9.1 控制查询计划评估](controlling-query-plan-evaluation.html)
[8.9.2 可切换优化](switchable-optimizations.html)
[8.9.3 优化器提示](optimizer-hints.html)
[8.9.4 索引提示](index-hints.html)
[8.9.5 优化器成本模型](cost-model.html)
[8.9.6 优化器统计](optimizer-statistics.html)
[8.10 缓冲和缓存](buffering-caching.html)
[8.10.1 InnoDB 缓冲池优化](innodb-buffer-pool-optimization.html)
[8.10.2 MyISAM 密钥缓存](myisam-key-cache.html)
[8.10.3 准备好的语句和存储程序的缓存](statement-caching.html)
[8.11 优化锁定操作](locking-issues.html)
[8.11.1 内部锁定方法](internal-locking.html)
[8.11.2 表锁定问题](table-locking.html)
[8.11.3 并发插入](concurrent-inserts.html)
[8.11.4 元数据锁定](metadata-locking.html)
[8.11.5 外部锁定](external-locking.html)
[8.12 优化 MySQL 服务器](optimizing-server.html)
[8.12.1 优化磁盘 I/O](disk-issues.html)
[8.12.2 使用符号链接](symbolic-links.html)
[8.12.3 优化内存使用](optimizing-memory.html)
[8.13 衡量绩效（基准测试）](optimize-benchmarking.html)
[8.13.1 测量表达式和函数的速度](select-benchmarking.html)
[8.13.2 使用自己的基准](custom-benchmarks.html)
[8.13.3 用性能衡量性能\_图式](monitoring-performance-schema.html)
[8.14 检查服务器线程（进程）信息](thread-information.html)
[8.14.1 访问进程列表](processlist-access.html)
[8.14.2 线程命令值](thread-commands.html)
[8.14.3 一般线程状态](general-thread-states.html)
[8.14.4 复制源线程状态](source-thread-states.html)
[8.14.5 复制 I/O（接收器）线程状态](replica-io-thread-states.html)
[8.14.6 复制 SQL 线程状态](replica-sql-thread-states.html)
[8.14.7 复制连接线程状态](replica-connection-thread-states.html)
[8.14.8 NDB 集群线程状态](mysql-cluster-thread-states.html)
[8.14.9 事件调度程序线程状态](event-scheduler-thread-states.html)

[](<>)[](<>)[](<>)

本章介绍如何优化 MySQL 性能并提供示例。优化涉及多个级别的配置、调整和测量性能。根据您的工作角色（开发人员、DBA 或两者的组合），您可能会在单个 SQL 语句、整个应用程序、单个数据库服务器或多个联网数据库服务器的级别上进行优化。有时您可以主动并提前计划性能，而有时您可能会在问题发生后对配置或代码问题进行故障排除。优化 CPU 和内存使用还可以提高可伸缩性，使数据库能够处理更多负载而不会减慢速度。
