t-sql查询进阶--理解sql server中索引的概念,原理以及其他

t-sql查询进阶--理解sql server中索引的概念,原理以及其他

ID:21803255

大小:381.00 KB

页数:9页

时间:2018-10-24

t-sql查询进阶--理解sql server中索引的概念,原理以及其他_第1页
t-sql查询进阶--理解sql server中索引的概念,原理以及其他_第2页
t-sql查询进阶--理解sql server中索引的概念,原理以及其他_第3页
t-sql查询进阶--理解sql server中索引的概念,原理以及其他_第4页
t-sql查询进阶--理解sql server中索引的概念,原理以及其他_第5页
资源描述:

《t-sql查询进阶--理解sql server中索引的概念,原理以及其他》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、简介        在SQLServer中,索引是一种增强式的存在,这意味着,即使没有索引,SQLServer仍然可以实现应有的功能。但索引可以在大多数情况下大大提升查询性能,在OLAP中尤其明显.要完全理解索引的概念,需要了解大量原理性的知识,包括B树,堆,数据库页,区,填充因子,碎片,文件组等等一系列相关知识,这些知识写一本小书也不为过。所以本文并不会深入讨论这些主题。 索引是什么   索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。   精简来说,索引是一种

2、结构.在SQLServer中,索引和表(这里指的是加了聚集索引的表)的存储结构是一样的,都是B树,B树是一种用于查找的平衡多叉树.理解B树的概念如下图:      理解为什么使用B树作为索引和表(有聚集索引)的结构,首先需要理解SQLServer存储数据的原理.   在SQLSERVER中,存储的单位最小是页(PAGE),页是不可再分的。就像细胞是生物学中不可再分的,http://gexing.qqq80.com或是原子是化学中不可再分的最小单位一样.这意味着,SQLSERVER对于页的读取,要么整个读取,

3、要么完全不读取,没有折中.   在数据库检索来说,对于磁盘IO扫描是最消耗时间的.因为磁盘扫描涉及很多物理特性,这些是相当消耗时间的。所以B树设计的初衷是为了减少对于磁盘的扫描次数。如果一个表或索引没有使用B树(对于没有聚集索引的表是使用堆heap存储),那么查找一个数据,需要在整个表包含的数据库页中全盘扫描。这无疑会大大加重IO负担.而在SQLSERVER中使用B树进行存储,则仅仅需要将B树的根节点存入内存,经过几次查找后就可以找到存放所需数据的被叶子节点包含的页!进而避免的全盘扫描从而提高了性能.   

4、下面,通过一个例子来证明:    在SQLSERVER中,表上如果没有建立聚集索引,则是按照堆(HEAP)存放的,假设我有这样一张表:        现在这张表上没有任何索引,http://liebiao.wan128.cn也就是以堆存放,我通过在其上加上聚集索引(以B树存放)来展现对IO的减少:     理解聚集和聚集索引   在SQLSERVER中,最主要的两类索引是聚集索引和非聚集索引。可以看到,这两个分类是围绕聚集这个关键字进行的.那么首先要理解什么是聚集.   聚集在索引中的定义:   为了提高某

5、个属性(或属性组)的查询速度,把这个或这些属性(称为聚集码)上具有相同值的元组集中存放在连续的物理块称为聚集。   简单来说,聚集索引就是:      在SQLSERVER中,聚集的作用就是将某一列(或是多列)的物理顺序改变为和逻辑顺序相一致,比如,我从adventureworks数据库的employee中抽取5条数据:      当我在ContactID上建立聚集索引时,再次查询:      在SQLSERVER中,聚集索引的存储是以B树存储,B树的叶子直接存储聚集索引的数据:      因为聚集索引改变

6、的是其所在表的物理存储顺序,所以每个表只能有一个聚集索引. 非聚集索引    因为每个表只能有一个聚集索引,如果我们对一个表的查询不仅仅限于在聚集索引上的字段。我们又对聚集索引列之外还有索引的要求,那么就需要非聚集索引了.    非聚集索引,本质上来说也是聚集索引的一种.非聚集索引并不改变其所在表的物理结构,而是额外生成一个聚集索引的B树结构,但叶子节点是对于其所在表的引用,这个引用分为两种,如果其所在表上没有聚集索引,则引用行号。如果其所在表上已经有了聚集索引,则引用聚集索引的页.    一个简单的非聚集

7、索引概念如下:        可以看到,非聚集索引需要额外的空间进行存储,按照被索引列进行聚集索引,并在B树的叶子节点包含指向非聚集索引所在表的指针.    MSDN中,对于非聚集索引描述图是:        可以看到,非聚集索引也是一个B树结构,与聚集索引不同的是,B树的叶子节点存的是指向堆或聚集索引的指针.    通过非聚集索引的原理可以看出,如果其所在表的物理结构改变后,比如加上或是删除聚集索引,那么所有非聚集索引都需要被重建,这个对于性能的损耗是相当大的。所以最好要先建立聚集索引,再建立对应的非聚集

8、索引. 聚集索引VS非聚集索引     前面通过对于聚集索引和非聚集索引的原理解释.我们不难发现,大多数情况下,聚集索引的速度比非聚集索引要略快一些.因为聚集索引的B树叶子节点直接存储数据,而非聚集索引还需要额外通过叶子节点的指针找到数据.     还有,对于大量连续数据查找,非聚集索引十分乏力,因为非聚集索引需要在非聚集索引的B树中找到每一行的指针,再去其所在表上找数据,性能因此会大打折扣.有时甚至不如不加非聚

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。