Sql server SQL Server:在同一查询中同时连接索引视图和原始表

Sql server SQL Server:在同一查询中同时连接索引视图和原始表,sql-server,Sql Server,我有一个名为dbo.Documents的SQL Server表,它在primary\u id列上有一个索引和主键。我在这个表上还有一个索引视图,名为dbo.vw\u Documents,它在列secondary\u id上索引 我想写一个如下的查询: SELECT * FROM dbo.Document DOC LEFT JOIN dbo.PrimaryTable PRIME WITH (INDEX(IDX_Documents_primary_id))

我有一个名为
dbo.Documents
的SQL Server表,它在
primary\u id
列上有一个索引和主键。我在这个表上还有一个索引视图,名为
dbo.vw\u Documents
,它在列
secondary\u id
上索引

我想写一个如下的查询:

SELECT *
FROM
    dbo.Document DOC
LEFT JOIN  
    dbo.PrimaryTable PRIME WITH (INDEX(IDX_Documents_primary_id))
                           ON PRIME.primary_id = DOC.primary_id
LEFT JOIN 
    dbo.SecondaryTable SECND WITH (INDEX(IDX_Documents_secondary_id))
                             ON SECND.secondary_id = DOC.seconary_id
基本上,我想使用不同的索引将
dbo.Documents
连接到
dbo.PrimaryTable
dbo.SecondaryTable

如何使用索引视图实现这一点


我尝试只指定不同的索引,但不起作用,并且忽略了次要索引。

为什么要通过提示强制索引?你能把计划贴出来让我们看看吗?也许您的索引没有被使用,因为它们没有覆盖。请使用以下工具来分享你的计划:这是一个有点开放的。您应该首先查看查询计划,并尝试理解优化器实际执行的物理操作。大多数情况下,索引提示是不需要的,我想说的是,在一个查询中有两个提示有一种不好的味道。我会粘贴查询计划,但它比这个问题所暗示的要大。基本上,它没有在我想要的地方使用索引,我相信这是因为SQL不能同时使用索引视图和常规表。也就是说,它不能在同一个查询中同时使用主id和次id。不管怎样,这是我的猜测。查询计划是否因为实际使用的查询比问题中的查询更大而更大?如果是这样,那可能是真正的原因,而不是你所想的。如果查看已发布的实际查询的查询计划(没有其他联接或筛选器),会发生什么情况?孤立,孤立,孤立!我在查询计划中看到,76%的时间都花在使用主_id连接dbo.SecondaryTable上。这是不正确的。没有暗示。