簡體   English   中英

ActionFilter屬性中的CTE性能

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM