charindex ,PATINDEX,contains,FREETEXT用法
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
SELECT jobTitle FROM job_job
wherecharindex('程序员',jobTitle)>0
SELECT jobTitle FROM job_job
where jobTitle like'程序员%'
select jobTitle from job_job
wherePATINDEX('%程序员%',jobTitle)>0
select jobTitle from job_job
wherecontains(jobTitle,'程序员')
select jobTitle from job_job
whereFREETEXT(jobTitle,'程序员')
测试数据6万 SQL2008
4G内存,windwos server2008 cpu:Pentium(R)Dual-Core E6500
charindex
(1801 行受影响)
表 'job_job'。扫描计数 1,逻辑读取 7945 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
SQL Server 执行时间:
CPU 时间 = 141 毫秒,占用时间 = 312 毫秒。
SQL Server 执行时间:
CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。
SQL Server 执行时间:
CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。
like
(171 行受影响)
表 'job_job'。扫描计数 3,逻辑读取 8746 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
SQL Server 执行时间:
CPU 时间 = 79 毫秒,占用时间 = 51 毫秒。
SQL Server 执行时间:
CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。
SQL Server 执行时间:
CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。
如果like语法改成 like '%程序员%' 结果也是1801 为了不破坏索引的情况下去掉了前面的%号
PATINDEX
(1801 行受影响)
表 'job_job'。扫描计数 1,逻辑读取 7945 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
SQL Server 执行时间:
CPU 时间 = 218 毫秒,占用时间 = 551 毫秒。
SQL Server 执行时间:
CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。
SQL Server 执行时间:
CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。
contains
(1801 行受影响)
表 'job_job'。扫描计数 0,逻辑读取 5524 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
SQL Server 执行时间:
CPU 时间 = 16 毫秒,占用时间 = 184 毫秒。
SQL Server 执行时间:
CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。
SQL Server 执行时间:
CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。
FREETEXT
(16397 行受影响)
表 'job_job'。扫描计数 1,逻辑读取 7945 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
SQL Server 执行时间:
CPU 时间 = 78 毫秒,占用时间 = 274 毫秒。
SQL Server 执行时间:
CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。
SQL Server 执行时间:
CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。
测试数据精确度不高包含的意思吧
contains,FREETEXT必须创建全文索引
其它文章
http://www.cnblogs.com/freexiaoyu/archive/2010/08/28/1810697.html
http://www.cnblogs.com/freexiaoyu/archive/2010/08/28/1810696.html