在数据库中写一个视图。从1个数据库调用该视图时,运行该视图需要0秒钟,而从另一个数据库调用时,该视图需要2.5分钟。
我创建了一个最能描述此问题的视频。在这里观看:https://youtu.be/jEqI2bUyelQ
我很讨厌通过删除它来重新创建视图。 我试图比较查询执行计划,它们在使用一个数据库与另一个数据库运行时是不同的。 我对查询进行了自我调查,发现如果删除了where子句,则性能将重新获得,并且两者所需的时间相同。
预期结果是,无论从哪个数据库调用视图,运行都需要0秒。
这是SQL脚本:
SELECT
cus.MacolaCustNo,
dsp.cmp_code ,
count(distinct dsp.item_no) AS InventoryOnDisplay,
(SELECT max(dsp.LastSynchronizationDate)
FROM Hinkley.dbo.vw_HH_next_Capture_date ) AS UpdatedDate,
case
WHEN DATEADD(DAY, 90, isnull(max(dsp.LastSynchronizationDate),'1/1/1900')) >=
(SELECT max(dsp.LastSynchronizationDate)
FROM Hinkley.dbo.vw_HH_next_Capture_date )
THEN 'Compliant'
WHEN DATEADD(DAY, 90, isnull(max(dsp.LastSynchronizationDate),'1/1/1900')) <=
(SELECT max(dsp.LastSynchronizationDate)
FROM Hinkley.dbo.vw_HH_next_Capture_date )
AND DATEADD(DAY, 90, isnull(max(dsp.LastSynchronizationDate),'1/1/1900')) >= getdate()
THEN 'Warning'
ELSE 'Non-Compliant'
END AS Inventory_Status
FROM
Hinkley.dbo.HLIINVDSP_SQL dsp (nolock)
INNER JOIN
[DATA].dbo.vw_HLI_Customer (nolock) cus
ON cus.CusNo = dsp.cmp_code
WHERE
cus.cust_showroom = 1
AND
cus.active_y = 1
GROUP BY cus.MacolaCustNo,dsp.cmp_code