sqlserver中的模糊搜索优化
我试图优化存储过程的性能。我必须用LIKE运算符搜索两列。 这是查找表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,
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需要%前缀。考虑使用全文搜索。将临时表记录移动到物理表并实现全文搜索,这是优化查询数据的唯一方式。全文可能不是答案。