什么情况下创建索引,什么时候不需要索引?
什么时候需要创建索引
- 主键自动建立唯一索引
- 频繁作为查询条件的字段应该创建索引
- 查询中排序的字段创建索引将大大提高排序的速度(索引就是排序加快速查找
- 查询中统计或者分组的字段;
什么时候不需要创建索引
- 频繁更新的字段不适合创建索引,因为每次更新不单单是更新记录,还会更新索引,
- 保存索引文件where条件里用不到的字段,不创建索引;
- 表记录太少,不需要创建索引;
- 经常增删改的表;
- 数据重复且分布平均的字段,因此为经常查询的和经常排序的字段建立索引。
注意某些数据包含大量重复数据,因此他建立索引就没有太大的效果,例如性别字段,只有男女,不适合建立索引。
索引的种类有哪些?
虽然使用索引的本质目的是帮我们快速定位想要查找的数据,但实际上,索引有很多种类。
从功能逻辑上说,索引主要有 4 种,分别是普通索引、唯⼀索引、主键索引和全文索引。
普通索引:最基本的索引,它没有任何限制
唯一索引:索引列的值必须唯一,且不能为空,如果是组合索引,则列值的组合必须唯一。
主键索引:特殊的索引,唯一的标识一条记录,不能为空,一般用primary key来约束。
全文索引:全文索引时将存储在数据库中的整本书或整篇文章中的任意内容信息查找出来的技术。
它可以根据需要获取全文中有关章,节,段,句,词等信息,也可以进行各种统计和分析。
普通索引是基础的索引,没有任何约束,主要⽤于提⾼查询效率。
唯⼀索引就是在普通索引的基础上增加了数据 唯⼀性的约束,在⼀张数据表⾥可以有多个唯⼀索引。
主键索引在唯⼀索引的基础上增加了不为空的约束,也就 是 NOT NULLUNIQUE,⼀张表⾥最多只有⼀个主键索引。
全⽂索引用的不多,MySQL自带的全文索引只支持英文。
我们通常可以采用专⻔的全⽂搜索引擎,⽐如 ES ElasticSearch) 和 Solr。
按照物理实现⽅式,索引可以分为 2 种:聚集索引和非聚集索引。
我们也把聚集索引称为⼆级索引或者辅助索引
什么是聚集索引和非聚集索引聚集索引:
类似字典正文内容本身就是一种按照一定规则排列的目录
非聚集索引:这种目录纯粹是目录,正文纯粹是正文的排序方式 每个表只能有一个聚集索引,因为目录只能按照一种方法进行排序 。
聚集索引与⾮聚集索引的原理不同,在使⽤上也有⼀些区别:
- 聚集索引的叶⼦节点存储的就是我们的数据记录,⾮聚集索引的叶⼦节点存储的是数据位置。⾮聚集索引不 会影响数据表的物理存储顺序。
- ⼀个表只能有⼀个聚集索引,因为只能有⼀种排序存储的⽅式,但可以有多个⾮聚集索引,也就是多个索引目录提供数据检索。
- 使用聚集索引的时候,数据的查询效率⾼,但如果对数据进⾏插⼊,删除,更新等操作,效率会⽐⾮聚集索引低。