引擎
- InnoDB:采用两阶段锁定协议,支持事务,实现了四个标准的隔离级别(默认可重复读,通过间隙锁策略防止幻读的出现),索引基于聚簇索引建立。
- MyISAM:默认存储引擎,不支持事务和行级锁,崩溃后无法安全恢复。
索引
索引类型
- B-Tree索引
- 全值匹配
- 匹配最左前缀
- 匹配列前缀
- 匹配范围值
- 精确匹配某一列并范围匹配另外一列
- 只访问索引的查询
- 哈希索引
- 精确匹配索引所有列
索引的优点
- 减少服务器需要扫描的数据量
- 帮助服务器避免排序和临时表
- 将随机I/O变为顺序I/O
高性能的索引策略
- 独立的列
- 查询中列必需是独立的,不能是表达式的一部分,也不能使函数的参数
- 前缀索引和索引选择性
- 选择足够长的前缀以保证较高的选择性,又不能太长
- 多列索引
- 选择合适的索引列顺序
- 聚簇索引
查询性能优化
优化数据访问
- 查询不需要的记录(limit)
- 多表关联时返回全部列
- 总是取出全部列
- 重复查询相同的数据
- explain type(全表扫描、索引扫描、范围扫描、唯一范围扫描、常数引用)
- explain extra(using index、using where)
重构查询的方式
- 一个复杂查询拆分为多个简单查询
- 切分查询
- 分解关联查询
查询执行的基础
1. 查询优化器
- 重新定义关联表的顺序
- 将外连接转化成内连接
- 使用等价交换原则
- 优化COUNT()、MIN()、MAX()
- 预估并转化为常数表达式
- 覆盖索引扫描
- 子查询优化
- 提前终止查询
- 等值查询
- 列表IN()的比较