SQL Server:如何优化“喜欢”查询?
发布时间:2020-12-12 06:14:07 所属栏目:MsSql教程 来源:网络整理
导读:我有一个查询,使用通配符“喜欢”搜索客户端.例如: SELECT TOP (10) [t0].[CLIENTNUMBER],[t0].[FIRSTNAME],[t0].[LASTNAME],[t0].[MI],[t0].[MDOCNUMBER] FROM [dbo].[CLIENT] AS [t0] WHERE (LTRIM(RTRIM([t0].[DOCREVNO])) = '0') AND ([t0].[FIRSTNAME]
我有一个查询,使用通配符“喜欢”搜索客户端.例如:
SELECT TOP (10) [t0].[CLIENTNUMBER],[t0].[FIRSTNAME],[t0].[LASTNAME],[t0].[MI],[t0].[MDOCNUMBER] FROM [dbo].[CLIENT] AS [t0] WHERE (LTRIM(RTRIM([t0].[DOCREVNO])) = '0') AND ([t0].[FIRSTNAME] LIKE '%John%') AND ([t0].[LASTNAME] LIKE '%Smith%') AND ([t0].[SSN] LIKE '%123%') AND ([t0].[CLIENTNUMBER] LIKE '%123%') AND ([t0].[MDOCNUMBER] LIKE '%123%') AND ([t0].[CLIENTINDICATOR] = 'ON') 它还可以在“where”子句中使用较少的参数,例如: SELECT TOP (10) [t0].[CLIENTNUMBER],[t0].[MDOCNUMBER] FROM [dbo].[CLIENT] AS [t0] WHERE (LTRIM(RTRIM([t0].[DOCREVNO])) = '0') AND ([t0].[FIRSTNAME] LIKE '%John%') AND ([t0].[CLIENTINDICATOR] = 'ON') 任何人都能说出优化此类查询性能的最佳方法是什么?也许我需要创建一个索引?该表在生产中最多可以有1000K记录. 解决方法要为模式具有“%XXX%”形式的LIKE做很多事情,您需要查找SQL Server的全文索引功能,并使用CONTAINS而不是LIKE.原样,你正在进行全表扫描,因为普通索引无法帮助搜索以通配符开头的项目 – 但是全文索引会./* ... */ WHERE (LTRIM(RTRIM([t0].[DOCREVNO])) = '0') AND (contains([t0].[FIRSTNAME],'John')) AND (contains([t0].[LASTNAME],'Smith')) AND (contains([t0].[SSN],'123')) AND (contains([t0].[CLIENTNUMBER],'123')) AND (contains([t0].[MDOCNUMBER],'123')) AND ([t0].[CLIENTINDICATOR] = 'ON') (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |