mssql sqlserver 快速了解非聚集索引的方法分享


摘要:
下文讲述mssql sqlserver 非聚集索引简介,可帮助读者快速了解非聚集索引,如下所示:
实验环境:sql server 2008 R2



非聚集索引简介:

非聚集索引是独立于数据行并依据数据行的特定列(一列或多列)生成一种数据缓存,数据缓存中存储RowID指向物理表的实际地址,我们将这种索引模式称之为非聚集索引。
非聚集索引同物理表的存储顺序可能不同。

非聚集索引 :不影响表中的数据存储顺序,检索效率比聚集索引低,索引占用硬盘存储
空间大(30%~40%),对数据新增/修改/删除的影响很少。
特点:
(1) 一个表可以最多可以创建249个非聚集索引
(2) 先建聚集索引才能创建非聚集索引
(3) 非聚集索引数据与索引不同序
(4) 数据与非聚集索引在不同位置
(5) 非聚集索引在叶节点上存储,在叶节点上有一个“指针”直接指向要查询的数据区域
(6) 数据不会根据非聚集索引键的顺序重新排列数据
语法:


非聚集索引的特性:
1.不会影响物理表的存储顺序
2.检索效率有时会比聚集索引低(因为涉及书签查找)
3.sqlserver中数据表可以拥有很多非聚集索引(最多可达到249)
4.物理表中的数据存储顺序不会随非聚集索引的变化而变化
5.非聚集索引索引存放位置同物理表存放位置不同


非聚集索引常见应用场景:

同其它索引的应用场景一致,高频查询的列上
大数据检索的列上

非聚集索引创建方法:

 create NONCLUSTERED INDEX [索引名称] ON [对象名](索引键)
 
 ---例:
  CREATE TABLE [dbo].[maomao365.com](
	[keyId] [int] NULL,
	[infoA] [numeric](5, 2) NULL,
	[infoB] [decimal](5, 2) NULL
)

go

   ---检测索引是否存在,不存在则删除
IF  EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'[dbo].[maomao365.com]') AND name = N'IX_maomao365.com_cluster')
DROP INDEX [IX_maomao365.com_cluster] ON [dbo].[maomao365.com] WITH ( ONLINE = OFF )
GO
 
---创建非聚集索引,索引键为2列
CREATE NONCLUSTERED INDEX [IX_maomao365.com_cluster] ON [dbo].[maomao365.com] 
(
	[keyId] ASC,
	[infoA] DESC
) 

go



IF  EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'[dbo].[maomao365.com]') AND name = N'IX_maomao365.com_cluster')
DROP INDEX [IX_maomao365.com_cluster] ON [dbo].[maomao365.com] WITH ( ONLINE = OFF )
GO
 
---创建非聚集索引,索引键为2列,索引数据包含(infoB列) 
CREATE NONCLUSTERED INDEX [IX_maomao365.com_cluster] ON [dbo].[maomao365.com] 
(
	[keyId] ASC,
	[infoA] DESC
) include(infoB)

go