深入理解数据库索引
什么是索引
1. 索引是指针,指向表里的数据。
2. 索引通常与相应的表示分开存储的,其主要目的是提高数据检索的性能。
3. 索引的创建于删除不会影响到数据本身,但会影响到数据检索的速度。
4. 索引也会占用表空间,而且可能会比表本身大
聚集索引(clustered index,也称聚类索引、簇集索引)
聚集索引是指数据库表行中数据的物理顺序与键值的逻辑(索引)顺序相同。
一个表只能有一个聚集索引,因为一个表的物理顺序只有一种情况,所以,对应的聚集索引只能有一个。
举例:
- 定义数据库时定义一个自增id字段(物理存储也按照这个id自增)
- 字典存储中,按照拼音排序,字典的正文部分本身就是一个目录,您不需要再去查其他目录来找到您需要找的内容。
非聚集索引(nonclustered index,也称非聚类索引、非簇集索引)
该索引中索引的逻辑顺序与磁盘上行的物理存储顺序不同。
数据行不按非聚集索引键的顺序排序和存储。
如何使用 聚集索引与非聚集索引
动作描述 | 使用聚集索引 | 使用非聚集索引 |
---|---|---|
列经常被分组排序 | 应 | 应 |
返回某范围内的数据 | 应 | 不应 |
一个或极少不同值 | 不应 | 不应 |
小数目的不同值 | 应 | 不应 |
大数目的不同值 | 不应 | 应 |
频繁更新的列 | 不应 | 应 |
外键列 | 应 | 应 |
主键列 | 应 | 应 |
频繁修改索引列 | 不应 | 应 |
索引如何工作
索引分类
单字段索引
基于一个字段创建的索引
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)
隐含索引
隐含索引是数据库服务程序在创建对象时,自动创建的。
数据会为主键约束和唯一性约束自动创建索引。(主键和唯一性约束在插入数据时都需要检查唯一性,建立索引可以使唯一性检查效率更高)
标签:INDEX,顺序,NAME,数据库,索引,深入,聚集 来源: https://www.cnblogs.com/NeilZhang/p/11519311.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。