索引是一种为了加速数据表中行记录检索的数据结构
mysql:B+树
特点:
- 在根节点和支节点(中间节点)之上没有数据区
- 所有的数据内容保存在叶子节点之上
- 数据的组织和查找过程采用的是左闭合的比较方式
基于B树的优势:
- B+树是B-树的Plus版本,IO的效率高于B-树
- 基于索引的表扫描性能高于B-树,排序能力更强于B-树
- 基于索引的查询B+更趋于稳定(固定的查询次数)
创建索引需要注意的问题
- 索引列的离散性,离散性越高越好,重复度越低越好。
- 索引项的比较规则 (隐式转换)
- 联合索引遵循最左前置原则(最常用列>l离散度高>最少空间),单列索引是一种特殊的联合索引
- 覆盖索引:通过索引项的信息可直接返回所需的查询列
Sql常见优化规则
- SQL的查询一定要基于索引完成SQL的结果集扫描
- 避免索引列上使用函数或者运算,这样会导致索引失效
- 避免列的隐式转换
- where 字句中like模糊匹配%,%放置在查询条件右边
- 使用索引扫描,联合索引中的列从左往右,命中越多越好.
- 尽可能使用SQL语句用到的索引完成排序,避免使用文件排序的方式查询
- 有效的列信息即可.少用*代替列信息