深入理解数据库索引

深入理解数据库索引

什么是索引

1. 索引是指针,指向表里的数据。
2. 索引通常与相应的表示分开存储的,其主要目的是提高数据检索的性能。
3. 索引的创建于删除不会影响到数据本身,但会影响到数据检索的速度。
4. 索引也会占用表空间,而且可能会比表本身大

聚集索引(clustered index,也称聚类索引、簇集索引)

聚集索引是指数据库表行中数据的物理顺序与键值的逻辑(索引)顺序相同。
一个表只能有一个聚集索引,因为一个表的物理顺序只有一种情况,所以,对应的聚集索引只能有一个。

举例:

  1. 定义数据库时定义一个自增id字段(物理存储也按照这个id自增)
  2. 字典存储中,按照拼音排序,字典的正文部分本身就是一个目录,您不需要再去查其他目录来找到您需要找的内容。

非聚集索引(nonclustered index,也称非聚类索引、非簇集索引)

该索引中索引的逻辑顺序与磁盘上行的物理存储顺序不同。
数据行不按非聚集索引键的顺序排序和存储。

如何使用 聚集索引与非聚集索引

动作描述 使用聚集索引 使用非聚集索引
列经常被分组排序
返回某范围内的数据 不应
一个或极少不同值 不应 不应
小数目的不同值 不应
大数目的不同值 不应
频繁更新的列 不应
外键列
主键列
频繁修改索引列 不应

索引如何工作

index_visit_table

索引分类

单字段索引

基于一个字段创建的索引
CREATE INDEX INDEX_NAME
ON TABLE_NAME(COLUMN_NAME)

唯一索引

唯一索引不允许表里有重复值,除此之外与普通索引相同。
CREATE UNIQUE INDEX INDEX_NAME
ON TABLE_NAME(COLUMN_NAME)

注: 允许NULL值得字段上不能创建唯一索引

组合索引

 基于表里的两个或多个字段建立的索引。
 在创建组合索引时,需要考虑性能的问题,因为字段在索引里的顺序对数据检索的速度有很大影响。
 CREATE INDEX INDEX_NAME
ON TABLE_NAME(COLUMN1,COLUMN2)

隐含索引

隐含索引是数据库服务程序在创建对象时,自动创建的。
数据会为主键约束和唯一性约束自动创建索引。(主键和唯一性约束在插入数据时都需要检查唯一性,建立索引可以使唯一性检查效率更高)

猜你喜欢

转载自www.cnblogs.com/NeilZhang/p/11519311.html
今日推荐