charindex ,PATINDEX,contains,FREETEXT用法

View Code
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

原文地址:https://www.cnblogs.com/freexiaoyu/p/2112739.html