• 约 2 分钟
高性能MySQL
Schema与数据类型优化
- 选择优化的数据类型
- Schema设计中的陷阱
- 范式和反范式
创建高性能索引
- 索引的类型
- 索引的优点(主要是针对B-tree类型的索引)
- 索引并不是总是好的
- 高性能的索引策略
- 独立的列在WHERE中尽量放表达式一侧,不要指望SQL优化器帮你化简表达式
- 索引选择性与前缀索引
- 索引选择性指的是列的不同值与行数的比值,范围在
1/行数到1之间,越大索引的提升越高
- 对于长字符串的列(也包括blob等二进制),要在前缀索引与索引选择性之间做取舍
- 前缀索引
- 如何确定前缀长度
- 怎么创建前缀索引
- 前缀索引的缺点
- 多列索引
- 聚簇索引
- 覆盖索引
- 索引扫描/索引排序
- 索引压缩
- 冗余索引和重复索引
- 重复索引就是完全一样的索引,必须去重
- 冗余索引就是有其他索引可以做到冗余的索引的事,比如有了
(A,B)就没必要有(A)了
- 二级索引组合了主键也是一种冗余
- 冗余有时候也能提升性能
- 未使用的索引
- 维护索引和表
- 小技巧:no-op ALTER TABLE
- 减少索引和数据的碎片
查询性能优化
- 哪些因素影响查询性能
- 优化数据访问
- 只查必要的数据
- 限制行(通过
LIMIT)
- 限制列
- 重复的查询可以缓存起来
- 减少MySQL扫描的数据量
- 重构查询的方式
- 复杂查询拆分,充分利用缓存
- 注意在mysql 8之后query cache被废弃了,所有缓存都给到应用层管理
- 大查询拆分(主要指数据量)