一个表上的索引可以用于另一个表的查询吗?

Eri*_*k T 4 performance sql-server sql-server-2014 query-performance

我在 SQL Server (2014) 工作。

我有一个包含 XML 列的表。有一组众所周知的针对该列的查询,我想将其具体化为用于查询目的的持久计算列。但是,出于各种原因,我不想将这些列添加到表中。

我的问题是,有没有办法创建第二个表,其中包含优化器将用于第一个表的索引/键?这可以通过提示或其他机制实现吗?

Mik*_*son 6

Selective XML Indexes在幕后为您做这件事。

它允许您在索引中指定 XPath 表达式,当您在查询中使用该表达式时,SQL Server 使用系统表来检索您要查找的值。

例子:

create table dbo.T
(
  ID int identity primary key,
  XMLDoc xml not null
);

go

create selective xml index SIX_T on dbo.T(XMLDoc) for
(
  Node1 = '/root/node1/text()' as sql int
);

go

insert into dbo.T(XMLDoc) values('
<root>
  <node1>1</node1>
</root>');

go

select T.XMLDoc.value('(/root/node1/text())[1]', 'int') 
from dbo.T;
Run Code Online (Sandbox Code Playgroud)

XML 查询的查询计划显示了一个表扫描T和一个嵌套循环,并通过对主键的查找连接到保存您正在查找的值的系统表中。

在此处输入图片说明