共计 699 个字符,预计需要花费 2 分钟才能阅读完成。
创建索引的原则
- 数据量大,查询频繁,10万以上的表
- 经常作为查询 排序 分组的字段
- 区分度高的列作为索引
- 字符串类型,字段比较长,适合做前缀索引
- 尽量使用联合索引,减少单列索引。考虑到覆盖索引,避免回表,提高查询效率
- 控制索引数量,减少维护成本
- 如果索引列不能存NULL值,创建表时使用NOT NULL约束它。优化器知道每列是否包含NULL的时候,它可以更好地确定哪个索引最优效率用于索引。
索引失效的情况
- 违返最左原则,严格按照联合索引的顺序使用
- 范围查询时,右边使用的索引会失效
- 模糊查询时,%放在前面
- 添加了字段的索引上进行运算操作或者类型转换
- mobile字段原本是字符串类型
- explain select * from user where mobile = 17868884634; (索引失效)
- type: all
- explain select * from user where mobile = ‘17868884634’;
- type: ref
SQL性能优化总结
- 表设计优化, 选择合适的数据类型
- sql语句优化
- 索引优化
- 主从复制 读写分离
- 分库分表
事务的特性
ACID: 原子性, 一致性,隔离性,持久性
MVCC(多版本并发控制)
- Mutil-Version-Consistence-Controller
- 实现原理
- 隐藏字段: 事务ID(trx_id), 回滚指针(roll_pointer)
- undo log: 保证事务的一致性和隔离性
- readview
- 当前读: 读的数据的最新版本
- 快照读: select不加所读取, 比如RR开启事务的第一次读
正文完