SQL Server存储过程查询性能优化求助——基于执行计划分析
SQL Server存储过程查询性能优化求助——基于执行计划分析
我现在正在尝试优化下面这个查询的性能,没办法提供实际业务数据,但我把执行计划的情况和自己判断的问题点整理出来了,想请教下怎么能让它跑得更快。
原始查询语句
SELECT BookingDate.[Date] AS BookingDate, PABR.StartDate, PABR.EndDate INTO #MonthOfRoomBookings FROM Dates AS BookingDate INNER JOIN ProviderAccommodationRoomBooking AS PABR ON PABR.CreationDate >= BookingDate.[Date] AND PABR.CreationDate < DATEADD(DAY, 1, BookingDate.[Date]) WHERE BookingDate.[Date] >= @AsFarBackAs AND BookingDate.[Date] <= @DateTo AND PABR.ProviderId = @ProviderId AND PABR.ProviderHotelId IN (SELECT ProviderHotelId FROM #ProviderDetailsIWant) AND PABR.CancelledDate IS NULL
当前使用的索引
CREATE NONCLUSTERED INDEX IX_ProviderId_ProviderHotelId_CreationDate_StartDate_EndDate ON dbo.ProviderAccommodationRoomBooking(ProviderId, ProviderHotelId, CreationDate, StartDate, EndDate, CancelledDate) WITH (MAXDOP = 0, ONLINE = OFF)
性能现状与问题分析
现在这个存储过程执行一次大概需要800ms。我观察执行计划后发现:索引seek阶段返回了61162条数据,但到Index Spool环节再通过CreationDate过滤之后,最终只需要793条有效数据。我觉得如果能在索引seek的阶段就直接过滤掉不符合条件的CreationDate记录,性能应该能有明显提升。
想请教下各位,有没有什么办法可以优化这个查询的性能?
备注:内容来源于stack exchange,提问作者Andrew
相关产品推荐
相关产品推荐

