索引介绍
索引是用来优化sql的,索引可以提升效率,但是也有可能引起效率降低,所以我们必须要知道如何合理使用索引!
一、确定何时使用索引
- 整个数据表的数据量少时不需要索引(万级以下)
- 字段的重复度较大,即不同值较少,例如性别,不需要索引
- 也有例外,如果性别比是9:1,那么对比例少的做索引也可以加快查询,即留意分布情况
二、索引的业务逻辑功能分类
索引的本质目的是帮助我们快速定位想要查找的数据
- 普通索引
无任何约束,主要用于提高查询效率 - 唯一索引
有数据唯一性约束,一张表可以存在多个唯一索引 - 主键索引
唯一且不能为空的约束,一张表最多只有一个主键索引 - 全文索引
使用不多,musql只支持英文,我们可采用elasticsearch和Solr
三、索引的物理实现分类
- 非聚集索引
- 数据库系统会有单独存储空间存放非聚集索引
- 索引按顺序存储,维护一个索引表
- 索引指向的内容是随机存储的
- 系统做两次查找,先找索引,再找索引对应内容
- 聚集索引
- 数据行按照索引排序方式进行存储
- 一个表只能有一个聚集索引,因为数据要只能按一种顺序存储嘛
- 区别:
- 聚集索引叶子节点存储的是数据记录,而非聚集索引是数据位置。即非聚集索引不影响数据表的物理存储顺序
- 聚集索引一表仅一个,非聚集可以多个
- 聚集索引查询效率高,但增删改的效率比非聚集索引低
- 一些结论
对 WHERE 子句的字段建立索引,可以大幅提升查询效率。
采用聚集索引进行数据查询,比使用非聚集索引的查询效率略高。如果查询次数比较多,还是尽量使用主键索引进行数据查询。
四、索引的字段个数分类
-
单一索引
索引列为一列 -
联合索引
多个列组合在一起创建的索引,需注意创建的顺序问题。遵从最左匹配原则。即按照最左优先的方式进行索引匹配,左边匹配不到,后面都搞不了。联合索引就可能没用上了 -
应用:联合主键
总结
索引缺点:占用存储空间,降低数据库写操作的性能,多个索引的存在增加了索引选择时间
平衡索引的利弊:提高查询效率or维护索引的代价?