Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 视图不执行,但直接运行相同的查询会执行_Sql_Sql Server_Performance_Azure Sql Database - Fatal编程技术网

Sql 视图不执行,但直接运行相同的查询会执行

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

对于PowerBI的使用,我们在最大的表上有一个视图。但是,它将不会运行,使用PAGEIOLATCH_SH超时。查询非常简单:

从ProgramId='SpecialProgram'的视图中选择*

但是,如果我们在视图中运行查询,它将不会出现任何问题或超时。你知道这是什么原因吗?视图中的原始查询是:

从ProgramId='SpecularProgram'的表中选择第1列、第2列等

在分区中指定where子句不会改变行为并使其保持缓慢。当两者同时运行时,第一个的查询成本为99%。ProgramId在表中被分区,这个特定的程序是该分区的一部分

非常感谢

请查看附件中正在运行的查询的实际查询计划: ,XML和相应的ddl:

/****** 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。谢谢你的帮助!