【SQL必知必会学习笔记】索引的种类有哪些?
从功能逻辑上说,索引主要有 4 种,分别是普通索引、唯⼀索引、主键索引和全⽂索引。
普通索引是基础的索引,没有任何约束,主要⽤于提⾼查询效率。唯⼀索引就是在普通索引的基础上增加了数据唯⼀性的约束,在⼀张数据表⾥可以有多个唯⼀索引。主键索引在唯⼀索引的基础上增加了不为空的约束,也就是 NOT NULL+UNIQUE,⼀张表⾥最多只有⼀个主键索引。全⽂索引⽤的不多,MySQL ⾃带的全⽂索引只⽀持英⽂。我们通常可以采⽤专门的全⽂搜索引擎,⽐如 ES(ElasticSearch) 和Solr。其实前三种索引(普通索引、唯⼀索引和主键索引)都是⼀类索引,只不过对数据的约束性逐渐提升。在⼀张数据表中只能有⼀个主键索引,这是由主键索引的物理实现⽅式决定的,因为数据存储在⽂件中只能按照⼀种顺序进⾏存储。但可以有多个普通索引或者多个唯⼀索引。
按照物理实现⽅式,索引可以分为 2 种:聚集索引和⾮聚集索引。我们也把⾮聚集索引称为⼆级索引或者辅助索引。
聚集索引可以按照主键来排序存储数据,这样在查⾏的时候⾮常有效。举个例⼦,如果是⼀本汉语字典,我们想要查“数”这个字,直接在书中汉语拼⾳的位置即可,也就是拼⾳“shu”。这样到了索引的位置,在它后⾯就是我们想要的数据⾏。
⾮聚集索引⼜是什么呢?
在数据库系统会有单独的存储空间存放⾮聚集索引,这些索引项是按照顺序存储的,但索引项指向的内容是随机存储的。也就是说系统会进⾏两次查,第⼀次先到索引,第⼆次到索引对应的位置取出数据⾏。⾮聚集索引不会把索引指向的内容像聚集索引⼀样直接放到索引的后⾯,⽽是维护单独的索引表(只维护索引,不维护索引指向的数据),为数据检索提供⽅便。我们还以汉语字典为例,如果想要查
存的部首“数”字,那么按照部⾸查的⽅式,先到“数”字的偏旁部⾸,然后这个⽬录会告诉我们“数”字存放到第多少页,我们再去指定的页码这个字。
聚集索引指表中数据⾏按索引的排序⽅式进⾏存储,对查⾏很有效。只有当表包含聚集索引时,表内的数据⾏才会按索引列的值在磁盘上进⾏物理排序和存储。每⼀个表只能有⼀个聚集索引,因为数据⾏本⾝只能按⼀个顺序存储。
聚集索引与⾮聚集索引的原理不同,在使⽤上也有⼀些区别:
1. 聚集索引的叶⼦节点存储的就是我们的数据记录,⾮聚集索引的叶⼦节点存储的是数据位置。⾮聚集索引不会影响数据表的物理存储顺序。
2. ⼀个表只能有⼀个聚集索引,因为只能有⼀种排序存储的⽅式,但可以有多个⾮聚集索引,也就是多个索引⽬录提供数据检索。
3. 使⽤聚集索引的时候,数据的查询效率⾼,但如果对数据进⾏插⼊,删除,更新等操作,效率会⽐⾮聚集索引低。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论