索引分类#
按数据结构分类#
- B+Tree索引
- Hash索引
- Full-Text索引
按物理存储分类#
按字段特征分类#
按字段个数分类#
什么时候不需要用索引#
索引的优化方法#
- 前缀索引优化
含义: 前缀索引即使用某个字段中字符串的前几个字符建立索引。
优点: 前缀索引可以减小索引字段大小,增加一个索引页中存储的索引值,提高索引的查询速度。
局限性: order by 无法使用前缀索引,无法把前缀索引用作覆盖索引
- 覆盖索引优化
含义: 覆盖索引是指SQL中query的所有字段,在索引B+Tree的叶子节点上都能找得到的那些索引,从二级索引中查询得到记录,而不需要通过聚簇索引查询获得,可以避免回表的操作。
- 主键索引最好自增
主键索引为自增,在插入是是顺序插入即在已经数据结构的后方拓展,如果主键索引不为自增,则会产生随机插入的情况,即插入到已经的数据结构中,这时候就需要移动其他数据来满足插入新数据的需求。严重的甚至会产生页分裂即将数据从一个页复制到另一个页中。
- 索引最好设置为NOT NULL
- 防止索引失效
防止索引失效#
索引失效情况列举#
- 对索引使用左或者左右模糊匹配
当我们使用 like %xxx或者 like %xx% 这两种方式都会造成索引失效
- 对索引使用函数
如: select * from t_user where length(name)=6;
- 对索引进行表达式计算
如: explain select * from t_user where id + 1 = 10;
- 对索引隐式类型转换
如: select “10” > 9
- 联合索引非最左匹配
- Where子句中使用OR
如果在OR前的条件列是索引列,而在OR后的条件不是索引列,那么索引失效。