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