目录 前言1 第1章 查询响应时间5 1.1 假性能的一个真故事6 1.2 北极星6 1.3 查询报告7 1.4 查询分析14 1.5 改进查询响应时间29 1.6 何时优化查询31 1.7 MySQL:更快一点32 1.8 小结33 1.9 练习:识别慢查询34 第2章 索引和编制索引36 2.1 性能的红鲱鱼38 2.2 MySQL索引:通过图示介绍40 2.3 编制索引:如何像MySQL一样思考75 2.4 索引降级的常见原因79 2.5 表连接算法82 2.6 小结84 2.7 练习:找到重复的索引84 第3章 数据86 3.1 三个秘密87 3.2 少数据原则91 3.3 删除或归档数据108 3.4 小结112 3.5 练习:审查查询的数据访问情况113 第4章 访问模式114 4.1 MySQL什么都不做115 4.2 性能在极限位置变得不稳定116 4.3 丰田和法拉利120 4.4 数据访问模式121 4.5 应用程序修改129 4.6 更好、更快的硬件137 4.7 小结138 4.8 练习:描述访问模式139 第5章 分片140 5.1 为什么单个数据库不能伸缩140 5.2 小鹅卵石而不是��石147 5.3 分片简介148 5.4 替代选项157 5.5 小结160 5.6 练习:四年拟合160 第6章 服务器指标162 6.1 查询性能与服务器性能对比164 6.2 正常且稳定:好的数据库是枯燥的数据库166 6.3 关键性能指示器167 6.4 指标领域168 6.5 光谱173 6.6 监控和警报206 6.7 小结213 6.8 练习:检查关键性能指示器213 6.9 练习:检查警报和阈值214 第7章 复制延迟215 7.1 基础216 7.2 原因221 7.3 风险:数据丢失223 7.4 降低延迟:多线程复制227 7.5 监控231 7.6 恢复时间233 7.7 小结234 7.8 练习:监控次秒级延迟235 第8章 事务238 8.1 行锁239 8.2 MVCC和回滚日志253 8.3 历史列表长度257 8.4 常见问题259 8.5 报告263 8.6 小结270 8.7 练习:对历史列表长度发出警报271 8.8 练习:检查行锁271 第9章 其他挑战273 9.1 脑裂是大的风险273 9.2 数据漂移真实存在但不可见274 9.3 不要信任ORM275 9.4 模式总会改变276 9.5 MySQL扩展了标准SQL276 9.6 吵闹的邻居277 9.7 应用程序不会优雅地失败277 9.8 高性能MySQL很难278 9.9 练习:识别阻止发生脑裂的防护措施279 9.10 练习:检查数据漂移280 9.11 练习:混沌281 第10章 云中的MySQL283 10.1 兼容性284 10.2 管理285 10.3 网络和存储时延287 10.4 性能就是**289 10.5 小结290 10.6 练习:在云中**MySQL291