索引学习笔记
一、 索引概述
索引是数据库规划和系统维护至关重要的部分,添加正确的索引能够极大减少查询的执行时间。在正式学习索引知识前,将了解SQL Server 的数据存储机制,包括索引分配策略以及内部结构。
一、 数据库文件
与数据库有关的文件有两种:主数据库文件(*.MDF)、数据库日志文件(*.Ldf)。
主数据库文件是数据存储的地方。
数据库日志文件时记录从最后一次把数据提交到数据库中心以来,发生在数据库上的事情连续记录。
1. 区段
区段(extent)是用来为表和索引分配空间的基本存储单元。每个区段由8个连续的数据页组成(64k)
区段、数据页、数据行关系图如下所示:
1. 数据页
页是到达数据行的最后一个级别。尽管每个区段中页得数据时固定的,但是页中的行数是不固定的,这完全取决于行的大小,是可变的。数据页结构图:
1. 数据行
通常,行的大小能够达到8K,即一行数据占用一页数据页。
一、 理解索引
1. B树【平衡二叉树】
2. 索引类型和索引导航
3. 聚集索引
聚集索引是唯一的对与一个表而言,表中数据的物理顺序和表的聚集索引的顺序相同。聚集索引的特殊之处在于其页级是真正的数据
注意:当新纪录插入到索引结构的中间是,会发生常规的页拆分,来自原来页中后半部分的纪录被移动到新页上,新记录适当的插入到新的或旧的页中。页拆分对系统的系能开销很大,如图所示:
当新记录逻辑上位于索引结构的末尾时,将创建一个新页。但是只有新记录添加到新页中,如图所示:
聚集索引中数据导航:
3. 非聚集索引
堆上的非聚集索引在各方面都与聚集索引的作用方式很类似。但是依然有一些不同,页级不是数据,而是到数据的指针。指针以索引所指向的特定行为的行标识符形成,它由区、页和行偏移量组成。非聚集索引数据导航过程如下所示:
3. 聚集表上的非聚集索引
一、 索引管理
创建索引:
Create [unique] [Clustered] [Noclustered] index <索引名> On <表或视图名> (<列名> [ASC/DESC] [……n])
删除索引:
Drop Index <表或视图名>.<索引名>