XML 索引不完全支持可用于非 XML 索引的所有选项。

创建 XML 索引时注意下列事项:

  • 这确保了在对基表进行了分区的情况下,可以使用相同的分区方案和分区函数对主 XML 索引进行分区。

  • 在修改主键之前,必须删除表的所有 XML 索引。

  • 但是,一个 xml 类型列只允许有一个主 XML 索引。

  • 因此,同一表的 XML 索引和非 XML 索引不能具有相同的名称。

  • 您可以将这些选项的值指定为 OFF。

  • 用户无法单独为 XML 索引指定这些信息。

  • 但是,此选项不能通过删除辅助 XML 索引来创建新的主 XML 索引,反之亦然。

  • 主 XML 索引名称与视图名称有相同的限制。

    不能对视图中的 xml 类型列、 xml 类型列的 表值变量或 xml 类型变量创建 XML 索引。

  • 如果确实存在,则在尝试更改列类型之前必须删除该索引。

  • 如果没有设置,则 XML 数据类型方法将会失败。

    备注

    本主题后面部分提供的示例说明了如何查询目录视图以查找 XML 索引信息。

    类型化的 XML 与非类型化的 XML 的比较。

使用SSMS数据库管理工具创建主XML索引

使用表设计器创建主XML索引

1、连接数据库,选择数据库,选择数据表-》右键点击-》选择设计。

SQLServer之创建主XML索引

2、在表设计器窗口-》选择要创建xml索引的数据列-》右键点击-》选的xml索引。

SQLServer之创建主XML索引

3、在xml索引弹出框-》点击添加,添加索引-》输入索引名称-》输入索引描述-》表设计器可以选择默认-》点击关闭。

SQLServer之创建主XML索引

4、点击保存(或者ctrl+s)-》关闭表设计器-》刷新表-》查询结果。

SQLServer之创建主XML索引

使用对象资源管理器创建主XML索引

1、连接数据库,选择数据库,选择数据表-》展开数据表-》右键点击索引-》选择新建索引-》选择主XML索引。

SQLServer之创建主XML索引

2、在新建索引弹出框-》输入索引名称-》点击添加选择索引数据列。

SQLServer之创建主XML索引

3、在数据列弹出框-》选择数据列-》点击确定

SQLServer之创建主XML索引

4、在新建索引弹出框-》点击选项-》主XML索引属性可以自己设置,也可以选择系统默认。

SQLServer之创建主XML索引

5、在新建索引弹出框-》选择扩展属性-》输入扩展属性名称和值-》输入完成点击确定。

SQLServer之创建主XML索引

6、不需要刷新表可直接查看结果。

SQLServer之创建主XML索引

使用T-SQL脚本创建主XML索引

语法:

--声明数据库引用
use 数据库;
go

--判断xml索引是否存在,如果存在则先删除在创建
if exists(select * from sys.indexes where name=索引名称)
drop index 索引名称 on 表名;
go

--添加xml数据类型数据列
create
primary --声明为主索引
xml --声明为xml索引
index --声明创建索引
索引名称--声明索引名称
on 表名--声明索引所在表
(列名) --声明索引在哪个数据列
with(
--pad_index:指定索引填充
--pad_index=on:FILLFACTOR 指定的可用空间百分比应用于索引的中间级页。
--pad_index=off或未指定 fillfactor:考虑到中间级页上的键集,可以将中间级页几乎填满,但至少要为最大索引行留出足够空间。
pad_index={ on | off },

--fillfactor=n:指定一个百分比,指示在数据库引擎创建或修改索引的过程中,应将每个索引页面的叶级填充到什么程度。 指定的值必须是 1 到 100 之间的整数。 默认值为 0。
fillfactor=n,

--statistics_norecompute:指定是否重新计算统计信息。
--statistics_norecompute=on:过时的统计信息不会自动重新计算。
--statistics_norecompute=off:启用自动统计信息更新。
statistics_norecompute={ on | off },

--aloow_row_locks:指定是否允许行锁。
--allow_row_locks=on:访问索引时允许行锁。数据库引擎确定何时使用行锁。
--allow_row_locks=off:不使用行锁。
allow_row_locks={ on | off },

--allow_page_locks:指定是否允许使用页锁。
--allow_page_locks=on:访问索引时允许页锁。数据库引擎确定何时使用页锁。
--allow_page_locks=off:不使用页锁。

allow_page_locks={ on | off },

--drop_existing:表示如果这个索引还在表上就 drop 掉然后在 create 一个新的。 默认为 OFF。
--drop_existing=on:指定要删除并重新生成现有索引,其必须具有相同名称作为参数 index_name。
--drop_existing=off:指定不删除和重新生成现有的索引。 如果指定的索引名称已经存在,SQL Server 将显示一个错误。
drop_existing={ on | off },

--sort_in_tempdb:指定是否将排序结果存储在 tempdb 中。
--sort_in_tempdb=on:在tempdb中存储用于生成索引的中间排序结果。如果tempdb与用户数据库不在同一组磁盘上,就可缩短创建索引所需的时间。但是,这会增加索引生成期间所使用的磁盘空间量。
--sort_in_tempdb=off:中间排序结果与索引存储在同一数据库中。
sort_in_tempdb={ on | off },

--online:指定在索引操作期间基础表和关联的索引是否可用于查询和数据修改操作。 默认为 OFF。 REBUILD 可作为 ONLINE 操作执行。
--online=on:在索引操作期间不持有长期表锁。 在索引操作的主要阶段,源表上只使用意向共享 (IS) 锁。
--这使得能够继续对基础表和索引进行查询或更新。
--操作开始时,在很短的时间内对源对象持有共享 (S) 锁。
--操作结束时,如果创建非聚集索引,将在短期内获取对源的 S(共享)锁;
--当联机创建或删除聚集索引时,以及重新生成聚集或非聚集索引时,将在短期内获取 SCH-M(架构修改)锁。 但联机索引锁是短的元数据锁,特别是 Sch-M 锁必须等待此表上的所有阻塞事务完成。
--在等待期间,Sch-M 锁在访问同一表时阻止在此锁后等待的所有其他事务。 对本地临时表创建索引时,ONLINE 不能设置为 ON。
--online=off:在索引操作期间应用表锁。这样可以防止所有用户在操作期间访问基础表。
--创建、重新生成或删除聚集索引或者重新生成或删除非聚集索引的脱机索引操作将对表获取架构修改 (Sch-M) 锁。
--这样可以防止所有用户在操作期间访问基础表。 创建非聚集索引的脱机索引操作将对表获取共享 (S) 锁。 这样可以防止更新基础表,但允许读操作(如 SELECT 语句)。
online={ on | off },

--maxdop=max_degree_of_parallelism:在索引操作期间替代 max degree of parallelism 配置选项。 有关详细信息,请参阅 配置 max degree of parallelism 服务器配置选项。 使用 MAXDOP 可以限制在执行并行计划的过程中使用的处理器数量。 最大数量为 64 个处理器。
--max_degree_of_parallelism 可以是:
--1 - 取消生成并行计划。
-->1 - 将并行索引操作中使用的最大处理器数量限制为指定数量。
--0(默认值)- 根据当前系统工作负荷使用实际数量的处理器或更少数量的处理器。
--有关详细信息,请参阅 配置并行索引操作。
maxdop=max_degree_of_parallelism
)
go

--添加索引注释
execute sp_addextendedproperty N'MS_Description',N'缩影描述',N'user',N'dbo',N'table',N'test1',N'index',N'说明名称';
go

示例:

--声明数据库引用
use testss;
go

--判断xml索引是否存在,如果存在则先删除在创建
if exists(select * from sys.indexes where name='xmlindex')
drop index xmlindex on test1;
go

--添加xml数据类型数据列
create
primary --声明为主索引
xml --声明为xml索引
index --声明创建索引
xmlindex --声明索引名称
on test1 --声明索引所在表
(xml1) --声明索引在哪个数据列
with(
--pad_index:指定索引填充
--pad_index=on:FILLFACTOR 指定的可用空间百分比应用于索引的中间级页。
--pad_index=off或未指定 fillfactor:考虑到中间级页上的键集,可以将中间级页几乎填满,但至少要为最大索引行留出足够空间。
pad_index=on,

--fillfactor=n:指定一个百分比,指示在数据库引擎创建或修改索引的过程中,应将每个索引页面的叶级填充到什么程度。 指定的值必须是 1 到 100 之间的整数。 默认值为 0。
fillfactor=1,

--statistics_norecompute:指定是否重新计算统计信息。
--statistics_norecompute=on:过时的统计信息不会自动重新计算。
--statistics_norecompute=off:启用自动统计信息更新。
statistics_norecompute=off,

--aloow_row_locks:指定是否允许行锁。
--allow_row_locks=on:访问索引时允许行锁。数据库引擎确定何时使用行锁。
--allow_row_locks=off:不使用行锁。
allow_row_locks=on,

--aloow_row_locks:指定是否允许行锁。
--allow_row_locks=on:访问索引时允许行锁。数据库引擎确定何时使用行锁。
--allow_row_locks=off:不使用行锁。
allow_page_locks=on,

--drop_existing:表示如果这个索引还在表上就 drop 掉然后在 create 一个新的。 默认为 OFF。
--drop_existing=on:指定要删除并重新生成现有索引,其必须具有相同名称作为参数 index_name。
--drop_existing=off:指定不删除和重新生成现有的索引。 如果指定的索引名称已经存在,SQL Server 将显示一个错误。
drop_existing=off,

--sort_in_tempdb:指定是否将排序结果存储在 tempdb 中。
--sort_in_tempdb=on:在tempdb中存储用于生成索引的中间排序结果。如果tempdb与用户数据库不在同一组磁盘上,就可缩短创建索引所需的时间。但是,这会增加索引生成期间所使用的磁盘空间量。
--sort_in_tempdb=off:中间排序结果与索引存储在同一数据库中。
sort_in_tempdb=on,

--online:指定在索引操作期间基础表和关联的索引是否可用于查询和数据修改操作。 默认为 OFF。 REBUILD 可作为 ONLINE 操作执行。
--online=on:在索引操作期间不持有长期表锁。 在索引操作的主要阶段,源表上只使用意向共享 (IS) 锁。
--这使得能够继续对基础表和索引进行查询或更新。
--操作开始时,在很短的时间内对源对象持有共享 (S) 锁。
--操作结束时,如果创建非聚集索引,将在短期内获取对源的 S(共享)锁;
--当联机创建或删除聚集索引时,以及重新生成聚集或非聚集索引时,将在短期内获取 SCH-M(架构修改)锁。 但联机索引锁是短的元数据锁,特别是 Sch-M 锁必须等待此表上的所有阻塞事务完成。
--在等待期间,Sch-M 锁在访问同一表时阻止在此锁后等待的所有其他事务。 对本地临时表创建索引时,ONLINE 不能设置为 ON。
--online=off:在索引操作期间应用表锁。这样可以防止所有用户在操作期间访问基础表。
--创建、重新生成或删除聚集索引或者重新生成或删除非聚集索引的脱机索引操作将对表获取架构修改 (Sch-M) 锁。
--这样可以防止所有用户在操作期间访问基础表。 创建非聚集索引的脱机索引操作将对表获取共享 (S) 锁。 这样可以防止更新基础表,但允许读操作(如 SELECT 语句)。
online=off,

--maxdop=max_degree_of_parallelism:在索引操作期间替代 max degree of parallelism 配置选项。 有关详细信息,请参阅 配置 max degree of parallelism 服务器配置选项。 使用 MAXDOP 可以限制在执行并行计划的过程中使用的处理器数量。 最大数量为 64 个处理器。
--max_degree_of_parallelism 可以是:
--1 - 取消生成并行计划。
-->1 - 将并行索引操作中使用的最大处理器数量限制为指定数量。
--0(默认值)- 根据当前系统工作负荷使用实际数量的处理器或更少数量的处理器。
--有关详细信息,请参阅 配置并行索引操作。
maxdop=1
)
go

--添加索引注释
execute sp_addextendedproperty N'MS_Description',N'第一个xml数据列',N'user',N'dbo',N'table',N'test1',N'index',N'xmlindex';
go

SQLServer之创建主XML索引

创建主XML索引优缺点

优点:

1、可以完整、一致的表示XML的值。

2、生成索引避免了在运行时分析所有数据,并能实现高效的查询处理,从而使索引查找受益。

3、查询效率会大大提高。

缺点:

1、增加存储空间。

 

相关文章:

  • 2021-06-20
  • 2021-12-07
  • 2021-09-06
  • 2021-10-22
  • 2022-12-23
  • 2021-10-12
  • 2021-04-19
猜你喜欢
  • 2021-07-12
  • 2022-01-09
  • 2021-06-18
  • 2021-07-13
  • 2021-11-19
  • 2021-10-10
相关资源
相似解决方案