博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Clustered Index & Non Clustered Index
阅读量:4168 次
发布时间:2019-05-26

本文共 844 字,大约阅读时间需要 2 分钟。

 

聚簇索引和非聚簇索引都是为了增加数据检索速度而存在的.

在配置上, 每个表只能有一个聚簇索引,而能有200多个非聚簇索引。

在物理分配上, 每个表的数据都是分配在页上,一个页大概有8k左右,假设一条数据占1000字节的话,那么8000条数据占8000*1k/8k = 1000页面,这些数据存在于数据块中。

如果对这些数据中的某一10字节的字段做聚簇索引的话,8000 * 0.01K /8 = 10 页面,那么10页面作为存储这些索引而存在。并存放于索引块  

如果对这些数据中的某一10字节的字段做非聚簇索引的话,2 * 8000 * 0.01K /8 = 20 页面,那么20页面作为存储这些索引而存在。并存放于索引块。乘2 的原因请看以下叙述。

在功能上,      聚簇索引后,数据按照索引的顺序来排序,所以索引所指向的就是数据层里对应的相关数据。

                非聚簇索引后,数据不会按照索引的顺序来排序,所以数据库会先按字理或逻辑先生成首层索引, 再根据首层索引生成第二层索引,第二层索引

所指向的才是数据层里对应的相关数据。

在性能上,      聚簇索引在大多数的情况下对该索引的查询操作性能是最好的,查询先通过索引层(按上述的例子中,最多需要搜索10页)找到对应数据存在位置,就算是多条符合记录的数据,也是在旁边的数据位置中就能找到

                非聚簇索引在大多数的情况下对该索引的查询操作性能比聚簇索引稍次,查询也先通过首层索引(按上述的例子中,最多搜索10页)找到对应第二层索引存在位置,由第二层索引层再找到数据的物理位置。

 

                索引虽然可以增加查询速度,但也有以下缺陷,需要在设置时注意

1.     占用空间,虽然索引块增长速度不如数据块那么急剧,但毕竟也是消耗空间的。

2.     在select * 的访问语句时, 数据库会先搜索聚簇和非聚簇索引的索引块的索引,再搜索数据块,这种情况下表里完全不设索引的性能高于设了聚簇索引的性能(按上例要额外搜索10个页),设了聚簇的性能比设非聚簇的要好(按上例非聚簇要额外搜索20个页)

转载地址:http://vcgxi.baihongyu.com/

你可能感兴趣的文章
2019.2.29
查看>>
聊聊我当年在培训学校做开发的经历
查看>>
用Docker搭建Redis主从复制的集群
查看>>
盘点这些年我出的书,以及由此得到的收获
查看>>
用Python的Pandas和Matplotlib绘制股票KDJ指标线
查看>>
面试必问:对java多线程里Synchronized的思考
查看>>
最近接了本分布式组件面试书的选题,请大家一起来提意见
查看>>
Redis整合MySQL和MyCAT分库组件(来源是我的新书)
查看>>
Java程序员普遍存在的面试问题以及应对之道(新书第一章节摘录)
查看>>
程序员高效出书避坑和实践指南
查看>>
计算机方面毕业生怎样写简历
查看>>
从软件公司的异同点讲起,聊聊未来的程序员该如何选公司和谋规划
查看>>
我不想安于当前的限度,以达到所谓的幸福,回顾下2020年的我
查看>>
如何在面试中介绍自己的项目经验(面向java改进版)
查看>>
通过写n本书的积累,我似乎找到了写好技术文章的方法(回复送我写的python股票电子书)
查看>>
如果很好说出finalize用法,面试官会认为你很资深
查看>>
Java面试官经验谈:如何甄别候选人真实的能力,候选人如何展示值钱技能
查看>>
分析若干没面试机会和没体现实力的简历
查看>>
用python的matplotlib和numpy库绘制股票K线均线
查看>>
以互联网公司的经验告诉大家,架构师究竟比高级开发厉害在哪?
查看>>