Sql 视图不执行,但直接运行相同的查询会执行
对于PowerBI的使用,我们在最大的表上有一个视图。但是,它将不会运行,使用PAGEIOLATCH_SH超时。查询非常简单: 从ProgramId='SpecialProgram'的视图中选择* 但是,如果我们在视图中运行查询,它将不会出现任何问题或超时。你知道这是什么原因吗?视图中的原始查询是: 从ProgramId='SpecularProgram'的表中选择第1列、第2列等 在分区中指定where子句不会改变行为并使其保持缓慢。当两者同时运行时,第一个的查询成本为99%。ProgramId在表中被分区,这个特定的程序是该分区的一部分 非常感谢 请查看附件中正在运行的查询的实际查询计划: ,XML和相应的ddl:Sql 视图不执行,但直接运行相同的查询会执行,sql,sql-server,performance,azure-sql-database,Sql,Sql Server,Performance,Azure Sql Database,对于PowerBI的使用,我们在最大的表上有一个视图。但是,它将不会运行,使用PAGEIOLATCH_SH超时。查询非常简单: 从ProgramId='SpecialProgram'的视图中选择* 但是,如果我们在视图中运行查询,它将不会出现任何问题或超时。你知道这是什么原因吗?视图中的原始查询是: 从ProgramId='SpecularProgram'的表中选择第1列、第2列等 在分区中指定where子句不会改变行为并使其保持缓慢。当两者同时运行时,第一个的查询成本为99%。ProgramI
/****** Object: Table [dm].[AggProgramPeriodLoyalty] Script Date: 1/8/2020 3:47:03 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dm].[AggProgramPeriodLoyalty](
[AggProgramPeriodLoyaltyKey] [int] IDENTITY(1,1) NOT NULL,
[ProgramId] [nvarchar](100) NOT NULL,
[ProgramTitle] [nvarchar](255) NOT NULL,
[ProgramCurrency] [nvarchar](3) NULL,
[ProgramPeriodType] [nvarchar](50) NOT NULL,
[ProgramPeriodTypeLabel] [nvarchar](50) NULL,
[IsCurrentProgramPeriod] [tinyint] NOT NULL,
[IsLastCompletedProgramPeriod] [tinyint] NOT NULL,
[LoyaltyId] [nvarchar](100) NOT NULL,
[IsRegistered] [int] NOT NULL,
[IsRegisteredCml] [int] NOT NULL,
[UsedPlatforms] [nvarchar](100) NULL,
[DigitalStampsBalanceMutation] [int] NOT NULL,
[DigitalStampsBalance] [int] NOT NULL,
[DigitalRedeemPotential] [int] NOT NULL,
[DigitalParticipationBonusInteractions] [int] NOT NULL,
[DigitalParticipationBonusInteractionsCml] [int] NOT NULL,
[DigitalParticipationBonusStamps] [int] NOT NULL,
[DigitalParticipationBonusStampsCml] [int] NOT NULL,
[DigitalCollectInteractions] [int] NOT NULL,
[DigitalCollectInteractionsCml] [int] NOT NULL,
[IsNewDigitalCollector] [int] NOT NULL,
[IsDigitalCollector] [int] NOT NULL,
[IsDigitalCollectorCml] [int] NOT NULL,
[DigitalCollectedStamps] [int] NOT NULL,
[DigitalCollectedStampsCml] [int] NOT NULL,
[TurnoverByDigitalCollectors] [decimal](18, 5) NOT NULL,
[TurnoverByDigitalCollectorsCml] [decimal](18, 5) NOT NULL,
[DigitalRedeemInteractions] [int] NOT NULL,
[DigitalRedeemInteractionsCml] [int] NOT NULL,
[IsNewDigitalRedeemer] [int] NOT NULL,
[IsDigitalRedeemer] [int] NOT NULL,
[IsDigitalRedeemerCml] [int] NOT NULL,
[DigitalRedeemedStamps] [int] NOT NULL,
[DigitalRedeemedStampsCml] [int] NOT NULL,
[DigitalRewards] [int] NOT NULL,
[DigitalRewardsCml] [int] NOT NULL,
[TurnoverByDigitalRedeemers] [decimal](18, 5) NOT NULL,
[TurnoverByDigitalRedeemersCml] [decimal](18, 5) NOT NULL,
[AdditionalPaymentForDigitalRewards] [decimal](18, 5) NOT NULL,
[AdditionalPaymentForDigitalRewardsCml] [decimal](18, 5) NOT NULL,
[DigitalCounterRedeemInteractions] [int] NOT NULL,
[DigitalCounterRedeemInteractionsCml] [int] NOT NULL,
[DigitalConvertInteractions] [int] NOT NULL,
[DigitalConvertInteractionsCml] [int] NOT NULL,
[DigitalConvertedStamps] [int] NOT NULL,
[DigitalConvertedStampsCml] [int] NOT NULL,
[DigitalAddInteractions] [int] NOT NULL,
[DigitalAddInteractionsCml] [int] NOT NULL,
[DigitalAddedStamps] [int] NOT NULL,
[DigitalAddedStampsCml] [int] NOT NULL,
[DigitalDeductInteractions] [int] NOT NULL,
[DigitalDeductInteractionsCml] [int] NOT NULL,
[DigitalDeductedStamps] [int] NOT NULL,
[DigitalDeductedStampsCml] [int] NOT NULL,
[DigitalTransferToInteractions] [int] NOT NULL,
[DigitalTransferToInteractionsCml] [int] NOT NULL,
[DigitalTransferedToStamps] [int] NOT NULL,
[DigitalTransferedToStampsCml] [int] NOT NULL,
[DigitalTransferFromInteractions] [int] NOT NULL,
[DigitalTransferFromInteractionsCml] [int] NOT NULL,
[DigitalTransferedFromStamps] [int] NOT NULL,
[DigitalTransferedFromStampsCml] [int] NOT NULL,
[DigitalGiftCreatedInteractions] [int] NOT NULL,
[DigitalGiftCreatedInteractionsCml] [int] NOT NULL,
[DigitalGiftCreatedStamps] [int] NOT NULL,
[DigitalGiftCreatedStampsCml] [int] NOT NULL,
[DigitalGiftRedeemedInteractions] [int] NOT NULL,
[DigitalGiftRedeemedInteractionsCml] [int] NOT NULL,
[DigitalGiftRedeemedStamps] [int] NOT NULL,
[DigitalGiftRedeemedStampsCml] [int] NOT NULL,
[DigitalGiftExpiredInteractions] [int] NOT NULL,
[DigitalGiftExpiredInteractionsCml] [int] NOT NULL,
[DigitalGiftExpiredStamps] [int] NOT NULL,
[DigitalGiftExpiredStampsCml] [int] NOT NULL,
[DigitalGiftCancelledInteractions] [int] NOT NULL,
[DigitalGiftCancelledInteractionsCml] [int] NOT NULL,
[DigitalGiftCancelledStamps] [int] NOT NULL,
[DigitalGiftCancelledStampsCml] [int] NOT NULL,
[CreateDTS] [datetime2](3) NOT NULL,
[CreateExnId] [int] NOT NULL,
[UpdateDTS] [datetime2](3) NULL,
[UpdateExnId] [int] NULL,
[IsProfileCompleted] [int] NULL,
[IsProfileCompletedCml] [int] NULL,
[DigitalRedeemBonusInteractions] [int] NULL,
[DigitalRedeemBonusInteractionsCml] [int] NULL,
[DigitalRedeemBonusStamps] [int] NULL,
[DigitalRedeemBonusStampsCml] [int] NULL,
[DigitalCounterCollectInteractions] [int] NULL,
[DigitalCounterCollectInteractionsCml] [int] NULL,
[DigitalCounterRedeemBonusInteractions] [int] NULL,
[DigitalCounterRedeemBonusInteractionsCml] [int] NULL,
[ProgramWeekCombination] [nvarchar](100) NULL,
[TotalUsedPlatforms] [nvarchar](100) NULL,
CONSTRAINT [PK_AggProgramPeriodLoyalty] PRIMARY KEY CLUSTERED
(
[AggProgramPeriodLoyaltyKey] ASC,
[ProgramId] ASC
)WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF) ON [PS_ByProgramId]([ProgramId]),
CONSTRAINT [UK_AggProgramPeriodLoyalty] UNIQUE NONCLUSTERED
(
[ProgramId] ASC,
[ProgramPeriodType] ASC,
[LoyaltyId] ASC
)WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF) ON [PS_ByProgramId]([ProgramId])
) ON [PS_ByProgramId]([ProgramId])
GO
ALTER TABLE [dm].[AggProgramPeriodLoyalty] ADD DEFAULT ((0)) FOR [DigitalGiftCreatedInteractions]
GO
ALTER TABLE [dm].[AggProgramPeriodLoyalty] ADD DEFAULT ((0)) FOR [DigitalGiftCreatedInteractionsCml]
GO
ALTER TABLE [dm].[AggProgramPeriodLoyalty] ADD DEFAULT ((0)) FOR [DigitalGiftCreatedStamps]
GO
ALTER TABLE [dm].[AggProgramPeriodLoyalty] ADD DEFAULT ((0)) FOR [DigitalGiftCreatedStampsCml]
GO
ALTER TABLE [dm].[AggProgramPeriodLoyalty] ADD DEFAULT ((0)) FOR [DigitalGiftRedeemedInteractions]
GO
ALTER TABLE [dm].[AggProgramPeriodLoyalty] ADD DEFAULT ((0)) FOR [DigitalGiftRedeemedInteractionsCml]
GO
ALTER TABLE [dm].[AggProgramPeriodLoyalty] ADD DEFAULT ((0)) FOR [DigitalGiftRedeemedStamps]
GO
ALTER TABLE [dm].[AggProgramPeriodLoyalty] ADD DEFAULT ((0)) FOR [DigitalGiftRedeemedStampsCml]
GO
ALTER TABLE [dm].[AggProgramPeriodLoyalty] ADD DEFAULT ((0)) FOR [DigitalGiftExpiredInteractions]
GO
ALTER TABLE [dm].[AggProgramPeriodLoyalty] ADD DEFAULT ((0)) FOR [DigitalGiftExpiredInteractionsCml]
GO
ALTER TABLE [dm].[AggProgramPeriodLoyalty] ADD DEFAULT ((0)) FOR [DigitalGiftExpiredStamps]
GO
ALTER TABLE [dm].[AggProgramPeriodLoyalty] ADD DEFAULT ((0)) FOR [DigitalGiftExpiredStampsCml]
GO
ALTER TABLE [dm].[AggProgramPeriodLoyalty] ADD DEFAULT ((0)) FOR [DigitalGiftCancelledInteractions]
GO
ALTER TABLE [dm].[AggProgramPeriodLoyalty] ADD DEFAULT ((0)) FOR [DigitalGiftCancelledInteractionsCml]
GO
ALTER TABLE [dm].[AggProgramPeriodLoyalty] ADD DEFAULT ((0)) FOR [DigitalGiftCancelledStamps]
GO
ALTER TABLE [dm].[AggProgramPeriodLoyalty] ADD DEFAULT ((0)) FOR [DigitalGiftCancelledStampsCml]
GO
以及视图上根本没有执行的select语句的估计查询计划:
和视图DDL:
CREATE view [dm].[vwAggProgramPeriodLoyalty]
as
select [AggProgramPeriodLoyaltyKey] as [Agg Program Period Loyalty Key]
, upper([ProgramId]) as [Program Id]
, [ProgramTitle] as [Program Title]
, [ProgramCurrency] as [Program Currency]
, [ProgramPeriodType] as [Program Period Type]
, [ProgramPeriodTypeLabel] as [Program Period Type Label]
, upper([ProgramWeekCombination]) as [Program Week Combination]
, [IsCurrentProgramPeriod] as [Is Current Program Period]
, [IsLastCompletedProgramPeriod] as [Is Last Completed Program Period]
, [LoyaltyId] as [Loyalty Id]
, [IsRegistered] as [Is Registered]
, [IsRegisteredCml] as [Is Registered Cumulative]
, [UsedPlatforms] as [Used Platforms]
, [DigitalStampsBalanceMutation] as [Digital Stamps Balance Mutation]
, [DigitalStampsBalance] as [Digital Stamps Balance]
, [DigitalRedeemPotential] as [Digital Redeem Potential]
, [DigitalParticipationBonusInteractions] as [Digital Participation Bonus Interactions]
, [DigitalParticipationBonusInteractionsCml] as [Digital Participation Bonus Interactions Cumulative]
, [DigitalParticipationBonusStamps] as [Digital Participation Bonus Stamps]
, [DigitalParticipationBonusStampsCml] as [Digital Participation Bonus Stamps Cumulative]
, [DigitalCollectInteractions] as [Digital Collect Interactions]
, [DigitalCollectInteractionsCml] as [Digital Collect Interactions Cumulative]
, [IsNewDigitalCollector] as [Is First Digital Collect]
, [IsDigitalCollector] as [Is Digital Collector]
, [IsDigitalCollectorCml] as [Is Digital Collector Cumulative]
, [DigitalCollectedStamps] as [Digital Collected Stamps]
, [DigitalCollectedStampsCml] as [Digital Collected Stamps Cumulative]
, [TurnoverByDigitalCollectors] as [Turnover By Digital Collectors]
, [TurnoverByDigitalCollectorsCml] as [Turnover By Digital Collectors Cumulative]
, [DigitalRedeemInteractions] as [Digital Redeem Interactions]
, [DigitalRedeemInteractionsCml] as [Digital Redeem Interactions Cumulative]
, [IsNewDigitalRedeemer] as [Is First Digital Redeem]
, [IsDigitalRedeemer] as [Is Digital Redeemer]
, [IsDigitalRedeemerCml] as [Is Digital Redeemer Cumulative]
, [DigitalRedeemedStamps] as [Digital Redeemed Stamps]
, [DigitalRedeemedStampsCml] as [Digital Redeemed Stamps Cumulative]
, [DigitalRewards] as [Digital Rewards]
, [DigitalRewardsCml] as [Digital Rewards Cumulative]
, [TurnoverByDigitalRedeemers] as [Turnover By Digital Redeemers]
, [TurnoverByDigitalRedeemersCml] as [Turnover By Digital Redeemers Cumulative]
, [AdditionalPaymentForDigitalRewards] as [Additional Payment For Digital Rewards]
, [AdditionalPaymentForDigitalRewardsCml] as [Additional Payment For Digital Rewards Cumulative]
, [DigitalConvertInteractions] as [Digital Convert Interactions]
, [DigitalConvertInteractionsCml] as [Digital Convert Interactions Cumulative]
, [DigitalConvertedStamps] as [Digital Converted Stamps]
, [DigitalConvertedStampsCml] as [Digital Converted Stamps Cumulative]
, [DigitalAddInteractions] as [Digital Add Interactions]
, [DigitalAddInteractionsCml] as [Digital Add Interactions Cumulative]
, [DigitalAddedStamps] as [Digital Added Stamps]
, [DigitalAddedStampsCml] as [Digital Added Stamps Cumulative]
, [DigitalDeductInteractions] as [Digital Deduct Interactions]
, [DigitalDeductInteractionsCml] as [Digital Deduct Interactions Cumulative]
, [DigitalDeductedStamps] as [Digital Deducted Stamps]
, [DigitalDeductedStampsCml] as [Digital Deducted Stamps Cumulative]
, [DigitalTransferToInteractions] as [Digital Transfer To Interactions]
, [DigitalTransferToInteractionsCml] as [Digital Transfer To Interactions Cumulative]
, [DigitalTransferedToStamps] as [Digital Transfered To Stamps]
, [DigitalTransferedToStampsCml] as [Digital Transfered To Stamps Cumulative]
, [DigitalTransferFromInteractions] as [Digital Transfer From Interactions]
, [DigitalTransferFromInteractionsCml] as [Digital Transfer From Interactions Cumulative]
, [DigitalTransferedFromStamps] as [Digital Transfered From Stamps]
, [DigitalTransferedFromStampsCml] as [Digital Transfered From Stamps Cumulative]
, [DigitalGiftCreatedInteractions] as [Digital Gift Created Interactions]
, [DigitalGiftCreatedInteractionsCml] as [Digital Gift Created Interactions Cumulative]
, [DigitalGiftCreatedStamps] as [Digital Gift Created Stamps]
, [DigitalGiftCreatedStampsCml] as [Digital Gift Created Stamps Cumulative]
, [DigitalGiftRedeemedInteractions] as [Digital Gift Redeemed Interactions]
, [DigitalGiftRedeemedInteractionsCml] as [Digital Gift Redeemed Interactions Cumulative]
, [DigitalGiftRedeemedStamps] as [Digital Gift Redeemed Stamps]
, [DigitalGiftRedeemedStampsCml] as [Digital Gift Redeemed Stamps Cumulative]
, [DigitalGiftExpiredInteractions] as [Digital Gift Expired Interactions]
, [DigitalGiftExpiredInteractionsCml] as [Digital Gift Expired Interactions Cumulative]
, [DigitalGiftExpiredStamps] as [Digital Gift Expired Stamps]
, [DigitalGiftExpiredStampsCml] as [Digital Gift Expired Stamps Cumulative]
, [DigitalGiftCancelledInteractions] as [Digital Gift Cancelled Interactions]
, [DigitalGiftCancelledInteractionsCml] as [Digital Gift Cancelled Interactions Cumulative]
, [DigitalGiftCancelledStamps] as [Digital Gift Cancelled Stamps]
, [DigitalGiftCancelledStampsCml] as [Digital Gift Cancelled Stamps Cumulative]
from [dm].[AggProgramPeriodLoyalty];
此外,我还添加了超时概述:视图首先扫描基表,然后应用由分区键组成的过滤器。因此,性能差异非常大。执行计划完全不同。由于您没有在视图中执行任何操作,只选择了一些基本表字段,因此我建议您删除该视图并直接使用该表。另一种选择是TVF:
CREATE FUNCTION dbo.fn_MyWorkaround(@ProgramId VARCHAR(50))
RETURNS TABLE
RETURN(
select [AggProgramPeriodLoyaltyKey] as [Agg Program Period Loyalty Key]
, upper([ProgramId]) as [Program Id]
, [ProgramTitle] as [Program Title]
, [ProgramCurrency] as [Program Currency]
, [ProgramPeriodType] as [Program Period Type]
, [ProgramPeriodTypeLabel] as [Program Period Type Label]
, upper([ProgramWeekCombination]) as [Program Week Combination]
, [IsCurrentProgramPeriod] as [Is Current Program Period]
, [IsLastCompletedProgramPeriod] as [Is Last Completed Program Period]
, [LoyaltyId] as [Loyalty Id]
, [IsRegistered] as [Is Registered]
, [IsRegisteredCml] as [Is Registered Cumulative]
, [UsedPlatforms] as [Used Platforms]
, [DigitalStampsBalanceMutation] as [Digital Stamps Balance Mutation]
, [DigitalStampsBalance] as [Digital Stamps Balance]
, [DigitalRedeemPotential] as [Digital Redeem Potential]
, [DigitalParticipationBonusInteractions] as [Digital Participation Bonus Interactions]
, [DigitalParticipationBonusInteractionsCml] as [Digital Participation Bonus Interactions Cumulative]
, [DigitalParticipationBonusStamps] as [Digital Participation Bonus Stamps]
, [DigitalParticipationBonusStampsCml] as [Digital Participation Bonus Stamps Cumulative]
, [DigitalCollectInteractions] as [Digital Collect Interactions]
, [DigitalCollectInteractionsCml] as [Digital Collect Interactions Cumulative]
, [IsNewDigitalCollector] as [Is First Digital Collect]
, [IsDigitalCollector] as [Is Digital Collector]
, [IsDigitalCollectorCml] as [Is Digital Collector Cumulative]
, [DigitalCollectedStamps] as [Digital Collected Stamps]
, [DigitalCollectedStampsCml] as [Digital Collected Stamps Cumulative]
, [TurnoverByDigitalCollectors] as [Turnover By Digital Collectors]
, [TurnoverByDigitalCollectorsCml] as [Turnover By Digital Collectors Cumulative]
, [DigitalRedeemInteractions] as [Digital Redeem Interactions]
, [DigitalRedeemInteractionsCml] as [Digital Redeem Interactions Cumulative]
, [IsNewDigitalRedeemer] as [Is First Digital Redeem]
, [IsDigitalRedeemer] as [Is Digital Redeemer]
, [IsDigitalRedeemerCml] as [Is Digital Redeemer Cumulative]
, [DigitalRedeemedStamps] as [Digital Redeemed Stamps]
, [DigitalRedeemedStampsCml] as [Digital Redeemed Stamps Cumulative]
, [DigitalRewards] as [Digital Rewards]
, [DigitalRewardsCml] as [Digital Rewards Cumulative]
, [TurnoverByDigitalRedeemers] as [Turnover By Digital Redeemers]
, [TurnoverByDigitalRedeemersCml] as [Turnover By Digital Redeemers Cumulative]
, [AdditionalPaymentForDigitalRewards] as [Additional Payment For Digital Rewards]
, [AdditionalPaymentForDigitalRewardsCml] as [Additional Payment For Digital Rewards Cumulative]
, [DigitalConvertInteractions] as [Digital Convert Interactions]
, [DigitalConvertInteractionsCml] as [Digital Convert Interactions Cumulative]
, [DigitalConvertedStamps] as [Digital Converted Stamps]
, [DigitalConvertedStampsCml] as [Digital Converted Stamps Cumulative]
, [DigitalAddInteractions] as [Digital Add Interactions]
, [DigitalAddInteractionsCml] as [Digital Add Interactions Cumulative]
, [DigitalAddedStamps] as [Digital Added Stamps]
, [DigitalAddedStampsCml] as [Digital Added Stamps Cumulative]
, [DigitalDeductInteractions] as [Digital Deduct Interactions]
, [DigitalDeductInteractionsCml] as [Digital Deduct Interactions Cumulative]
, [DigitalDeductedStamps] as [Digital Deducted Stamps]
, [DigitalDeductedStampsCml] as [Digital Deducted Stamps Cumulative]
, [DigitalTransferToInteractions] as [Digital Transfer To Interactions]
, [DigitalTransferToInteractionsCml] as [Digital Transfer To Interactions Cumulative]
, [DigitalTransferedToStamps] as [Digital Transfered To Stamps]
, [DigitalTransferedToStampsCml] as [Digital Transfered To Stamps Cumulative]
, [DigitalTransferFromInteractions] as [Digital Transfer From Interactions]
, [DigitalTransferFromInteractionsCml] as [Digital Transfer From Interactions Cumulative]
, [DigitalTransferedFromStamps] as [Digital Transfered From Stamps]
, [DigitalTransferedFromStampsCml] as [Digital Transfered From Stamps Cumulative]
, [DigitalGiftCreatedInteractions] as [Digital Gift Created Interactions]
, [DigitalGiftCreatedInteractionsCml] as [Digital Gift Created Interactions Cumulative]
, [DigitalGiftCreatedStamps] as [Digital Gift Created Stamps]
, [DigitalGiftCreatedStampsCml] as [Digital Gift Created Stamps Cumulative]
, [DigitalGiftRedeemedInteractions] as [Digital Gift Redeemed Interactions]
, [DigitalGiftRedeemedInteractionsCml] as [Digital Gift Redeemed Interactions Cumulative]
, [DigitalGiftRedeemedStamps] as [Digital Gift Redeemed Stamps]
, [DigitalGiftRedeemedStampsCml] as [Digital Gift Redeemed Stamps Cumulative]
, [DigitalGiftExpiredInteractions] as [Digital Gift Expired Interactions]
, [DigitalGiftExpiredInteractionsCml] as [Digital Gift Expired Interactions Cumulative]
, [DigitalGiftExpiredStamps] as [Digital Gift Expired Stamps]
, [DigitalGiftExpiredStampsCml] as [Digital Gift Expired Stamps Cumulative]
, [DigitalGiftCancelledInteractions] as [Digital Gift Cancelled Interactions]
, [DigitalGiftCancelledInteractionsCml] as [Digital Gift Cancelled Interactions Cumulative]
, [DigitalGiftCancelledStamps] as [Digital Gift Cancelled Stamps]
, [DigitalGiftCancelledStampsCml] as [Digital Gift Cancelled Stamps Cumulative]
from [dm].[AggProgramPeriodLoyalty]
WHERE ProgramId = @ProgramId
)
GO
然后使用以下命令运行它:
SELECT *
FROM dbo.fn_MyWorkaround('ParticularProgram')
这将为您提供相同的执行时间。我可以看到两个问题: ProgramId上没有索引,因此即使是表查询也很慢。 视图查询实际上相当于…其中upperProgramId='SpecialProgram',因此即使ProgramId上的索引确实存在,它也不能直接使用。另见:。 建议: 索引ProgramId这也会加快表查询的速度。 修改视图以将ProgramId包含为[Program Id Original],然后在使用区分大小写排序规则时,假设您实际上不需要区分大小写,则查询该视图: 从[Program Id Original]=“SpecialProgram”所在的视图中选择* 或者,在upperProgramId上创建函数索引
另外,请考虑使用不区分大小写的排序规则,这样您就不需要在WHERE子句中使用upper。您好,欢迎使用Stack Overflow。目前,我们只能猜测-请为基表和视图发布一个模式定义,以及两个查询的执行计划。嗨!谢谢你的回答。我添加了一些信息,还想添加模式定义。您是指视图中使用的表结构和查询吗?或者你的意思不同?你在查询中使用了窗口函数吗?如果可以的话,我们更喜欢文本而不是图像!是的,表格和视图的DDL会很棒。@Bonzay,我现在包括了DDL。该视图不包含任何窗口函数,仅包含2个上限。据我所知,这不会影响性能。它看起来像是视图中的扫描和排序步骤导致了问题。实际上,我们将开始直接在表上查询,以防止这种情况发生,因为视图的主要功能是向名称中添加空格,现在我们将转到PowerBI。谢谢你的帮助!