正确认识SQL Server中的模糊查询LIKE
来源:互联网 发布:linux应用领域 编辑:程序博客网 时间:2024/05/19 22:57
目录
- 目录
- SQL Server中的模糊查询LIKE
- LIKE的匹配格式及正确使用
- 参考资料
SQL Server中的模糊查询LIKE
在SQL Server中,当我们想实现模糊查询时,可能我们首先想到的是使用LIKE语句,其次是使用全文搜索(即Full-Text Search),如下所示是通过LIKE语句对表Person.EmailAddress中的EmailAddress字段进行模糊查询:
--使用微软官方示例数据库AdventureWorks2008R2SELECT *FROM Person.EmailAddressWHERE EmailAddress LIKE '%mary%'
通常,当表的总记录达数十万时,LIKE的执行效率将明显下降。那么我们是否真的正确认识LIKE语句,本文将描述如何正确使用SQL Server中的LIKE语句进行模糊查询。
LIKE的匹配格式及正确使用
虽然在SQL Server中LIKE语句可使用如下4种通配符:
%
_
[]
[^]
但实际总结后,LIKE语句总共如下4种格式:
%HyperWang%
%HyperWang
HyperWang%
Hyper%Wang
注意通配符%的位置。
为了更好的理解这4种匹配格式,我们修改上述sql代码,并在执行后查看IO统计信息与实际执行计划:
--检查表中的索引情况sp_helpindex [Person.EmailAddress]-----------------------------------------------------------
表格所示,表Person.EmailAddress中的EmailAddress建有非聚集索引。执行修改后的sql代码:
--匹配mary在中间的记录SELECT EmailAddressFROM Person.EmailAddressWHERE EmailAddress LIKE '%mary%'--匹配mary在尾部的记录SELECT EmailAddressFROM Person.EmailAddressWHERE EmailAddress LIKE '%mary'--匹配以mary开头的记录SELECT EmailAddressFROM Person.EmailAddressWHERE EmailAddress LIKE 'mary%'--匹配以ma开头,ry结尾的记录SELECT EmailAddressFROM Person.EmailAddressWHERE EmailAddress LIKE 'ma%ry'
其中以格式mary%的效率最好,以index seek方式使用非聚集索引IX_EmailAddress_EmailAddress(如下图所示)。
(43 row(s) affected)
表 ‘EmailAddress’。扫描计数 1,逻辑读取 3 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
而%mary与%mary%的效率最差,IO开销最高,且以index scan方式使用非聚集索引
(0 row(s) affected)
表 ‘EmailAddress’。扫描计数 1,逻辑读取 186 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
因此当我们使用LIKE进行模糊查询时,应尽量使用mary%格式,避免%mary%的格式,同时建立有效的非聚集索引。
参考资料
LIKE (Transact-SQL)
https://msdn.microsoft.com/en-us/library/ms179859(v=sql.105).aspxImproving SQL Server Performance
https://msdn.microsoft.com/en-us/library/ff647793.aspx
- 正确认识SQL Server中的模糊查询LIKE
- SQL模糊查询中的Like
- SQL like 模糊查询
- SQL like 模糊查询
- SQL like 模糊查询
- SQL like 模糊查询
- SQL like模糊查询
- SQL like 模糊查询
- SQL like 模糊查询
- SQL like 模糊查询
- SQL like模糊查询
- 在SQL Server中用好模糊查询指令LIKE
- 在SQL Server中用好模糊查询指令LIKE
- SQL Server中用好模糊查询指令LIKE
- 在SQL Server中用好模糊查询指令LIKE
- SQL模糊查询语句(like)
- SQL模糊查询语法LIKE
- SQL 模糊查询(like)
- JavaScript面向对象:分页器类封装
- 图(最小生成树) MST 5
- Python教程学习简记4--Python 迭代(iteration)
- ssh密钥认证原理
- 通知与消息机制
- 正确认识SQL Server中的模糊查询LIKE
- Android 第九天(晚上)
- 【机房重构】——七层登陆代码分析
- 四川成都电信天邑TEWA-300AI EPON光猫各种折腾
- 树和二叉树
- 621C. Wet Shark and Flowers【概率】
- 加载大图到应用内存时所需的缩放步骤
- hdu2037 今年暑假不AC(贪心||暴力)
- Python教程学习简记5--Python 列表生成式(List Comprehensions)