小编HCh*_* Le的帖子

如何提高使用 LIKE %abc 的 where 子句的性能?

我有下面的 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)

有人可以帮我优化这个语句吗?十分感谢。

performance index sql-server select like

5
推荐指数
1
解决办法
1015
查看次数

标签 统计

index ×1

like ×1

performance ×1

select ×1

sql-server ×1