查询未使用视图索引,而是使用正常的 table 主键索引

Query is not using view index instead it is using normal table Primary Key index

我正在使用直接查询开发 Power BI 报表,即每次打开报表时,都会在我的数据库上执行查询,返回的行将显示在报表上。

我正在使用 Azure SQL 数据库作为数据源。

下面是我从中获取数据的 table 结构:

CREATE TABLE [reporting].[FactPaymentDetailsTable](
    [CheckPayId] [int] NOT NULL,
    [PaymentID] [int] NOT NULL,
    [Department] [nvarchar](50) NULL,
    [PaymentName] [nvarchar](50) NULL,
    [TipAmt] [decimal](15, 4) NOT NULL,
    [PayAmt] [decimal](15, 4) NOT NULL,
    [BusinessDate] [date] NULL,
    [Rounding] [decimal](21, 5) NOT NULL,
 CONSTRAINT [PK_FactPaymentDetailsTable] PRIMARY KEY CLUSTERED 
(
    [CheckPayId] ASC
)WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO

现在我的报告正在发送以下查询以显示视觉效果:

SELECT SUM([t0].[Rounding])
 AS [a0]
FROM 
(
(Select * From reporting.FactPaymentDetailsTable)
)
 AS [t0] 

由于我的 table.

中有大量数据,因此此查询需要更长的时间

为了优化其性能,我创建了一个定义如下的视图:

create view [reporting].[TotalRoundingAmountView] with schemabinding
as
select SUM(rounding) as Rounding, COUNT_BIG(*) as CountBig
from reporting.FactPaymentDetailsTable

并在下面定义的上面的视图上创建了一个索引:

CREATE UNIQUE CLUSTERED INDEX [ix_RoundingTotal] ON reporting.[TotalRoundingAmountView]
(
    Rounding 
)

所以现在当我执行查询时,即由我的报告执行,即下面的查询,预期结果是查询应该使用视图索引。但是,当我查看查询执行计划时,它显示 table 仍在使用 table 主键索引。

SELECT SUM([t0].[Rounding])
 AS [a0]
FROM 
(
(Select * From reporting.FactPaymentDetailsTable)
)
 AS [t0] 

谁能帮我解决这个问题。

我对销售数据采用的方法完全相同,在那种情况下,查询使用的是视图索引。我无法弄清楚为什么我的查询在这种情况下没有使用视图索引。

非常感谢任何帮助。

非常感谢。

在这种情况下,执行计划可能认为使用 table 的索引比视图的索引更快,试试这个关键字:"WITH (NOEXPAND)" 强制执行计划使用视图的索引.

如果需要更详细的信息,this article 可能会有帮助

您可能想尝试添加列存储索引而不是索引视图。索引视图非常适合加快特定查询的速度,但它们会对锁定和并发性产生很大影响(特别是在您的情况下),因为对 table 的每次更新都需要更新该视图,特别是该视图上的同一行.列存储和批处理模式处理应该为您提供第二条路径,该路径具有针对大型数据集查询的更优化的执行引擎,其中存储结构被压缩并且一些答案已为您预先聚合。请试一试,看看它是否更适合您。