若要建立主 XML 索引,请使用 CREATE INDEX (Transact-SQL) Transact-SQL DDL 语句。 XML 索引不彻底支持可用于非 XML 索引的全部选项。数据库
建立 XML 索引时注意下列事项:服务器
若要建立主 XML 索引,含有被索引的 XML 列的表(称为基表)必须具备主键的汇集索引。 这确保了在对基表进行了分区的状况下,可使用相同的分区方案和分区函数对主 XML 索引进行分区。架构
若是存在 XML 索引,则不能修改基表的汇集主键。 在修改主键以前,必须删除表的全部 XML 索引。函数
您能够对单个 xml 类型列建立主 XML 索引。 您没法将 XML 类型列做为键列来建立任何其余类型的索引。 可是,能够在非 XML 索引中包含 xml L 类型列。 表中的每一个 xml 类型列均可以有本身的主 XML 索引。 可是,一个 xml 类型列只容许有一个主 XML 索引。工具
XML 索引和非 XML 索引存在于相同的命名空间中。 所以,同一表的 XML 索引和非 XML 索引不能具备相同的名称。spa
对于 XML 索引,IGNORE_DUP_KEY 选项和 ONLINE 选项始终设置为 OFF。 您能够将这些选项的值指定为 OFF。设计
将用户表的文件组和分区信息应用于 XML 索引。 用户没法单独为 XML 索引指定这些信息。3d
DROP_EXISTING 索引选项能够删除主 XML 索引并建立一个新的主 XML 索引,或者删除辅助 XML 索引并建立一个新的辅助 XML 索引。 可是,此选项不能经过删除辅助 XML 索引来建立新的主 XML 索引,反之亦然。xml
主 XML 索引名称与视图名称有相同的限制。对象
不能对视图中的 xml 类型列、 xml 类型列的 表值变量或 xml 类型变量建立 XML 索引。
若要使用 ALTER TABLE ALTER COLUMN 选项将 xml 类型列从非类型化的 XML 更改成类型化的 XML,或者从类型化的 XML 更改成非类型化的 XML,则列不该存在 XML 索引。 若是确实存在,则在尝试更改列类型以前必须删除该索引。
建立 XML 索引时必须将选项 ARITHABORT 设置为 ON。 若要使用 XML 数据类型方法查询、删除、更新 XML 列中的值或向 XML 列中插入值,则必须对链接设置相同的选项。 若是没有设置,则 XML 数据类型方法将会失败。
备注
有关 XML 索引的信息能够在目录视图中找到。 可是,不支持 sp_helpindex 。 本主题后面部分提供的示例说明了如何查询目录视图以查找 XML 索引信息。
若是 XML 数据类型列包含类型为 XML 架构类型 xs:date 或 xs:dateTime (或这些类型的任何子类型)的值且这些值中的年份小于 1,则在对这样的 XML 数据类型列建立或从新建立主 XML 索引时,索引建立操做在 SQL Server 2008 和更高版本中将失败。 SQL Server 2005 容许使用这些值,所以在 SQL Server 2005中生成的数据库中建立索引时可能会出现这种问题。 有关详细信息,请参阅 类型化的 XML 与非类型化的 XML 的比较。
一、链接数据库,选择数据库,选择数据表-》右键点击-》选择设计。
二、在表设计器窗口-》选择要建立xml索引的数据列-》右键点击-》选的xml索引。
三、在xml索引弹出框-》点击添加,添加索引-》输入索引名称-》输入索引描述-》表设计器能够选择默认-》点击关闭。
四、点击保存(或者ctrl+s)-》关闭表设计器-》刷新表-》查询结果。
一、链接数据库,选择数据库,选择数据表-》展开数据表-》右键点击索引-》选择新建索引-》选择主XML索引。
二、在新建索引弹出框-》输入索引名称-》点击添加选择索引数据列。
三、在数据列弹出框-》选择数据列-》点击肯定。
四、在新建索引弹出框-》点击选项-》主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
优势:
一、能够完整、一致的表示XML的值。
二、XML 值相对较大,而检索的部分相对较小。 生成索引避免了在运行时分析全部数据,并能实现高效的查询处理,从而使索引查找受益。
三、查询效率会大大提升。
缺点:
一、增长存储空间。