繁体   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