[英]CTE performance in ActionFilter Attribute
我有一個ActionFilter屬性,用於檢查用戶的權限。 在該過濾器屬性中,我正在運行CTE
WITH Emp_CTE AS (
SELECT DesignationID, Title
FROM setupDesignations
WHERE ReportTo ='+@PositionID+'
UNION ALL
SELECT d.DesignationID, d.Title
FROM setupDesignations d
INNER JOIN Emp_CTE ecte ON ecte.DesignationID = d.ReportTo
)
Select COUNT(*) from
(
SELECT distinct SPOID from mktDoctorSPOs where SPOID IN (Select DesignationID from Emp_CTE)
UNION
SELECT SPOID from mktDoctorSPOs where SPOID = '+@PositionID+'
) tmp
我擔心性能問題,因為它必須在每個請求上執行,這可以改進還是有更好的方法......
我建議緩存結果。 填充ASP.NET緩存似乎很容易,然后只要您的查詢具有模糊的性能,您只需要為每個用戶運行一次。
鑒於無論如何命中數據庫都是昂貴的,即使你有一個好的查詢,在這里緩存結果也會有所幫助。
否則,您可能會考慮重構數據庫以不需要CTE,可能是更簡單的結構,或者模仿更簡單結構的索引視圖。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.