You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 15:50:30