什么是聚集索引和非聚集索引及其两者区别?
一、聚集索引
定义:数据行的物理顺序与列值(一般是主键的那一列)的 逻辑顺序相同,一个表中只能拥有一个聚集索引。
注: 1、由于物理排列方式与聚集索引的顺序相同,所以也就只能建立一个聚集索引了。
2、从下图可以看出聚集索引的好处了,索引的 叶子节点就是对应的数据节点,可以直接获取到对应的全部列的数据,而非聚集索引在索引没有覆盖到对应的列的时候需要进行二次查询,后面会详细讲。因此在查询方面聚集索引的速度往往会更占优势。
3、如果不创建索引,系统会自动创建一个隐含列作为表的聚集索引。
4、SQL Sever默认主键为聚集索引,也可以指定为非聚集索引,而MySQL里主键就是聚集索引
二、非聚集索引
定义:该索引中索引的逻辑顺序与磁盘上行的物理存储顺序不同,一个表中可以拥有多个非聚集索引。
注: 1、其实按照定义,除了聚集索引以外的索引都是非聚集索引,只是人们想细分一下非聚集索引,分成普通索引,唯一索引,全文索引。如果非要把非聚集索引类比成现实生活中的东西,那么非聚集索引就像新华字典的偏旁字典,他结构顺序与实际存放顺序不一定一致。
2、非聚集索引叶节点仍然是索引节点,只是有一个指针指向对应的数据块,此如果使用非聚集索引查询,而查询列中包含了其他该索引没有覆盖的列,那么他还要进行第二次的查询,查询节点上对应的数据行的数据。
3、使用以下语句进行查询,不需要进行二次查询,直接就可以从非聚集索引的节点里面就可以获取到查询列的数据。
select id, username from t1 where username = '小明'
select username from t1 where username = '小明'
4、但是使用以下语句进行查询,就需要二次的查询去获取原数据行的score:
select username, score from t1 where username = '小明'
5、可以看的出二次查询所花费的查询开销占比很大,达到50%。
6、聚集索引与非聚集索引区别原理图如下(如果有看不懂可以在评论区留言)
三、根本区别
1、区别:数据行的物理顺序与表的某个列值的逻辑顺序是否一致。
2、使用示例证明:
第一步:创建表和插入相关测试数据
create database IndexDemo
go
use IndexDemo
go
create table ABC
(
A int not null,
B char(10),
C varchar(10)
)
go
insert into ABC select 1,'B','C'
union select 5,'B','C'
union select 7,'B','C'
union select 9,'B','C'
go select * from abc
第二步:插入一条数据
insert into abc values('6','B','C')
第三步:创建聚集索引(注意:排列变成有序)
create clustered index CLU_ABC on abc(A)
第四步:删除聚集索引(注意:排列变成无序)
drop index abc.CLU_ABC
第五步:非聚集索引,添加新的记录,查看表顺序,如图四,并没有影响表的顺序
create nonclustered index NONCLU_ABC on abc(A)
insert into abc values('4','B','C')
备注:这是小编第一次这么认真的去写一篇博客,很多地方都是参考其他博主的文章,取其精华,去其糟粕,如有侵权请及时联系小编
什么是聚集索引和非聚集索引及其两者区别?相关推荐
- 一句话说清聚集索引和非聚集索引以及MySQL的InnoDB和MyISAM
聚集索引和非聚集索引以及MySQL的InnoDB和MyISAM经常遇到有人向我咨询这个问题,其实呢,网上帖子很多,也说的都对,但是呢,看客可不一定是真的理解了.所以今天在这里用最简短的语言让你明白这些 ...
- mysql非聚集索引区间查询_mysql的聚集索引和非聚集索引,回表查询,索引覆盖,最左前缀原则略解...
什么是聚集索引和非聚集索引 我们知道 Mysql 底层是用 B+ 树来存储索引的,且数据都存在叶子节点.对于 InnoDB 来说,它的主键索引和行记录是存储在一起的,因此叫做聚集索引(clustere ...
- 关于SQL 数据库表中的聚集索引和非聚集索引等
原文地址:http://www.cppblog.com/zuoyinbo/archive/2008/06/03/52075.html 1.概念 索引是在数据库表或者 ...
- 聚集索引和非聚集索引- -
聚集索引和非聚集索引- - 此文章引自http://www.vckbase.com/document/viewdoc/?id=1307 1.什么是聚集索引和非聚集索引 SQL SERVER提供了两种索 ...
- 聚集索引与非聚集索引的总结
一.索引简介 众所周知,索引是关系型数据库中给数据库表中一列或多列的值排序后的存储结构,SQL的主流索引结构有B+树以及Hash结构,聚集索引以及非聚集索引用的是B+树索引.这篇文章会总结SQL Se ...
- mysql创建非聚集索引_一文看懂聚集索引和非聚集索引的区别
一.深入浅出理解索引结构 实际上,可以把索引理解为一种特殊的目录.微软的SQL SERVER提供了两种索引:聚集索引(clustered index,也称聚类索引.簇集索引)和非聚集索引(nonclu ...
- mysql创建非聚集索引_聚集索引和非聚集索引的区别
作者:riemann riemann.blog.csdn.net/article/details/90324846 一.深入浅出理解索引结构 实际上,可以把索引理解为一种特殊的目录.微软的SQL SE ...
- 聚集索引和非聚集索引(整理)
聚集索引 一种索引,该索引中键值的逻辑顺序决定了表中相应行的物理顺序. 聚集索引确定表中数据的物理顺序.聚集索引类似于电话簿,后者按姓氏排列数据.由于聚集索引规定数据在表中的物理存储顺序,因此一个表 ...
- [转]SQL Server 索引基础知识(2)----聚集索引,非聚集索引
SQL Server 索引基础知识(2)----聚集索引,非聚集索引 [来自]http://blog.joycode.com/ghj/archive/2008/01/02/113291.aspx 由于 ...
- 聚集索引和非聚集索引的区别有哪些
SQL SERVER提供了两种索引:聚集索引和非聚集索引.其中聚集索引表示表中存储的数据按照索引的顺序存储,检索效率比非聚集索引高,但对数据更新影响较 大.非聚集索引表示数据存储在一个地方,索引存储在 ...
最新文章
- 交叉分解(Cross decomposition)、典型关联分析(Canonical Correlation Analysis,CCA)、偏最小二乘回归PLS
- 根据文件属性或权限进行find查找
- 290. Word Pattern
- C# WINFORM的自动更新程序
- LeetCode 234 回文链表
- java为什么不能输入钢筋符号_input.nextDouble();找不到符号
- Storm,Spark和Samza
- 内核并发控制---读写自旋锁 (来自网易)
- 谁是真凶?《CSI:犯罪现场调查》正帮助AI提高断案能力
- 美化下拉框select箭头部分(不彻底)
- gridview為什麼分頁後,GridView1_RowDataBound就運行不了
- jq 如何获取和当然元素相同类名的标签_JS/JQ基于localStorage的本地数据储存指南...
- Android 科大讯飞语音识别(详细步骤+源码)
- linux 分区100g整数,160GB硬盘双系统整数分区推荐方案
- Git报错:Pulling without specifying how to reconcile divergent branches is discouraged. You can squelch
- 自监督学习(四)Joint Unsupervised Learning of Deep Representations and Image Clusters
- 第四章 WEB表单(二)
- Salesforce常用技能
- VS.NET 2005
- 利用python进行数据分析数据集_《利用Python进行数据分析》终章·数据分析案例·学习笔记(二)...