sqlserver中的模糊搜索优化

sqlserver中的模糊搜索优化,sql,performance,tsql,query-optimization,sql-execution-plan,Sql,Performance,Tsql,Query Optimization,Sql Execution Plan,我试图优化存储过程的性能。我必须用LIKE运算符搜索两列。 这是查找表 CREATE TABLE [dbo].[PrincipalDiagnosis]( [PrincipalDiagnosisID] [int] IDENTITY(1,1) PRIMARY KEY NOT NULL, [Code] [varchar](10) NULL, [PrincipalDiagnosisDescription] [varchar](3500) NULL,

我试图优化存储过程的性能。我必须用LIKE运算符搜索两列。 这是查找表

CREATE TABLE [dbo].[PrincipalDiagnosis](
        [PrincipalDiagnosisID] [int] IDENTITY(1,1) PRIMARY KEY NOT NULL,
        [Code] [varchar](10) NULL,
        [PrincipalDiagnosisDescription] [varchar](3500) NULL,
   )
我在[Code]和[PrincipalDiagnosisDescription]列上创建了两个独立的非聚集索引。以下是对存储过程的查询:

SELECT RTRIM(LTRIM(Item)) AS SearchItem
    INTO #SearchItems
    FROM dbo.SplitString(@SearchQuery, ' ')
    WHERE RTRIM(LTRIM(Item))<>''

SELECT TOP (100) PrincipalDiagnosisID, 
    ISNULL(Code +' '+ PrincipalDiagnosisDescription, '') AS Info       
FROM dbo.PrincipalDiagnosis
WHERE EXISTS (
            SELECT 1
            FROM #SearchItems
            WHERE Code LIKE '%'+SearchItem+'%'
            OR PrincipalDiagnosisDescription LIKE '%'+SearchItem+'%'
         )
ORDER BY 2
这部分花了很多时间。在执行计划中,有搜索项的表扫描。 我使用的是SQL server 2014企业版。我想尽可能地优化这个查询。我将感谢你的宝贵建议。 谢谢 穆罕默德


这两个非聚集索引将永远不会使用,因为LIKE运算符中的前导字符为%。我能理解SearchIte一开始的缺点。但是SaltItIt需要%前缀。考虑使用全文搜索。将临时表记录移动到物理表并实现全文搜索,这是优化查询数据的唯一方式。全文可能不是答案。这两个非聚集索引将永远不会使用,因为LIKE运算符中的前导字符为%。我能理解SearchIte一开始的缺点。但是SaltItIt需要%前缀。考虑使用全文搜索。将临时表记录移动到物理表并实现全文搜索,这是优化查询数据的唯一方式。全文可能不是答案。