数据库

【SQL SERVER】索引

2020-04-04  本文已影响0人  WilsonPan

索引概述


索引的存在主要为了提高数据检索速度,设计高效的索引对于获得良好的数据库和应用程序性能极为重要。

索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息,就像平常我们用的新华字典的目录,假如新华字典没有目录有找一个字就必须从第一页一直翻到最后一页,这是多么令人绝望的事情。

索引是占有而外空间,是一种典型的空间换时间的做法,所以对待索引必须要保持敬畏之心,要建立在经常筛选的条件上,查询数据要时刻想着利用索引,竟然都花额外空间存储索引,不能让它白白浪费掉。

聚集索引


聚集索引基于数据行的键值在表内排序和存储这些数据行。 每个表只能有一个聚集索引,因为数据行本身只能按一个顺序存储。

简单来说就是聚集索引和数据的存放顺序是一致的,聚集索引叶节点就是数据。

创建准则
适合使用聚集索引情况
不适合使用聚集索引情况
TSQL创建聚集索引
--唯一的聚集索引
CREATE UNIQUE CLUSTERED INDEX [IX_TableName_Name] ON [dbo].[TableName] ([FieldName] ASC)

--不唯一的聚集索引
CREATE CLUSTERED INDEX [IX_TableName_Name] ON [dbo].[TableName] ([FieldName] ASC)

非聚集索引


非聚集索引包含索引键值和指向表数据存储位置的行定位器。 可以对表或索引视图创建多个非聚集索引。 通常,设计非聚集索引是为改善经常使用的、没有建立聚集索引的查询的性能。

简单来说不是聚集索引的就是非聚集索引。额,好像没解释一样。。。非聚集索引的叶节点是定位器。

创建准则
适合使用非聚集索引情况
不适合使用非聚集索引情况
聚集索引与非聚集索引区别(知识有限,未必全,希望补充)
TSQL创建非聚集索引
CREATE INDEX IX_TableName_FieldName ON [dbo].[TableName](FieldName DESC)

唯一索引


唯一索引能够保证索引键中不包含重复的值,从而使表中的每一行从某种方式上具有唯一性。 只有当唯一性是数据本身的特征时,指定唯一索引才有意义。

非聚集索引的一种,主要作用包含数据完整性,特别是大并发量下,数据库底层保证数据完整性。

创建准则
适合使用唯一索引情况
不适合使用唯一索引情况
TSQL创建唯一索引
CREATE UNIQUE INDEX IX_TableName_FieldName ON [dbo].[TableName](FieldName ASC) 

筛选索引


筛选索引是一种经过优化的非聚集索引,尤其适用于涵盖从定义完善的数据子集中选择数据的查询。 筛选索引使用筛选谓词对表中的部分行进行索引。

只把符合条件的数据做索引,相当于在一个表的子集做索引。从而达到下面几个好处

创建准则
适合使用筛选索引情况
不适合使用筛选索引情况
TSQL创建筛选索引
CREATE  INDEX IX_TableName_FieldName ON [dbo].[TableName](FieldName ASC)  where State > 1

非聚集索引包含列


通过将非键列添加到非聚集索引的叶级,扩展非聚集索引的功能。 通过包含非键列,可以创建覆盖更多查询的非聚集索引

通过把包含的列同时维护在索引页,达到当查询的数据都包含在索引中的数据的时候,因为在索引页找到所有数据,就不需要访问表的数据页,从而减少I/O操作,这种通常称为“覆盖查询”

创建准则
适合使用非聚集索引包含列
不适合使用非聚集索引包含列
TSQL创建筛选索引
CREATE  INDEX IX_TableName_FieldName ON DataTable(Field1 ASC) INCLUDE(Field2)
上一篇 下一篇

猜你喜欢

热点阅读