我有下面的 select 语句,结果非常慢(41 秒)
SELECT DISTINCT a.Doc_Resource_ID
,a.Parent_ID
,a.Logical_Path
,a.lvl
,CAST(SUBSTRING(a.Security_Level, 21, 1) AS TINYINT)
FROM Doc_ACL_Detail_D a
WHERE a.UserId = @I_vUserId
AND @I_vParentId = 0
OR (Logical_Path LIKE(CASE
WHEN @I_vParentId>0 THEN '%-'+LTRIM(STR(@I_vParentId))
END)
OR Logical_Path LIKE(CASE
WHEN @I_vParentId>0 THEN '%-'+LTRIM(STR(@I_vParentId))+'-%'
END ))
OPTION (MAXRECURSION 5000)
Run Code Online (Sandbox Code Playgroud)
我已经为表创建了非聚集索引Doc_ACL_Detail_D
,但执行计划仍然是表扫描。
我创建的索引:
CREATE NONCLUSTERED INDEX idx_Doc_ACL_Detail_D_UserId_Logical_Path
ON [dbo].[Doc_ACL_Detail_D] ([UserId],[Logical_Path])
INCLUDE (Parent_ID,Doc_Resource_ID,lvl,Security_Level)
Run Code Online (Sandbox Code Playgroud)
有人可以帮我优化这个语句吗?十分感谢。