SQL Server 索引的概念以及原理

索引是什么
索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息
精简来说,索引是一种结构,索引和表(这里指的是加了聚集索引的表)的存储结构是一样的,都是B树,B树是一种用于查找的平衡多叉树
一个表或索引没有使用B树(没有聚集索引的表是使用堆heap存储),那么查找一个数据,需要在整个表包含的数据库页中全盘扫描。而使用B树进行存储,经过几次查找后就可以找到存放所需数据的被叶子节点包含的页,进而避免的全盘扫描从而提高了性能。

 

理解聚集索引
聚集的作用就是将某一列(或是多列)的物理顺序改变为和逻辑顺序相一致

聚集索引的存储是以B树存储,B树的叶子直接存储聚集索引的数据

因为聚集索引改变的是其所在表的物理存储顺序,所以每个表只能有一个聚集索引

理解非聚集索引

非聚集索引,本质上来说也是聚集索引的一种。非聚集索引并不改变其所在表的物理结构,而是额外生成一个聚集索引的B树结构

但叶子节点是对于其所在表的引用,这个引用分为两种:1.表上没有聚集索引,则引用行号。2.表上已经有了聚集索引,则引用聚集索引的页

 

B树的叶子节点存的是指向堆或聚集索引的指针
聚集索引VS非聚集索引
大多数情况下,聚集索引的速度比非聚集索引要略快一些.因为聚集索引的B树叶子节点直接存储数据,而非聚集索引还需要额外通过叶子节点的指针找到数据
索引的代价
1.当表建立索引后,就以B树来存储数据.所以当对其进行更新插入删除时,就需要页在物理上的移动以调整B树.因此当更新插入删除数据时,会带来性能的下降
2. 非聚集索引需要额外的磁盘空间(因为非聚集索引相当于是一个表,只不过是用来存储聚集索引的引用指针和指向数据行的定位器)
3. 不恰当的非聚集索引反而会降低性能 对于大量连续数据查找,非聚集索引十分乏力,因为非聚集索引需要在非聚集索引的B树中找到每一行的指针,再去其所在表上找数据,性能因此会大打折扣.有时甚至不如不加非聚集索引

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值