and*_*111 3 sql sql-server sql-server-2005
我有一个查询,使用通配符"喜欢"搜索客户端.例如:
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')
Run Code Online (Sandbox Code Playgroud)
它还可以在"where"子句中使用较少的参数,例如:
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].[CLIENTINDICATOR] = 'ON')
Run Code Online (Sandbox Code Playgroud)
任何人都能说出优化此类查询性能的最佳方法是什么?也许我需要创建一个索引?该表在生产中最多可以有1000K记录.
要为LIKE
模式具有表单的位置做很多事情'%XXX%'
,您需要查找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')
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
13370 次 |
最近记录: |