搜索模式的查询性能

时间:2018-12-27 07:05:46

标签: sql-server sql-server-2008-r2 full-text-search sql-like patindex

我有以下示例数据以了解需求。

表格:

create table ft_test
(
    col1 int identity(1,1),
    col2 varchar(max)
);

insert into ft_test values('John A Henry');
insert into ft_test values('Dsouza mak Dee');
insert into ft_test values('Smith Ashla Don');

修改

CREATE UNIQUE INDEX UIX_test_Col1 ON ft_test(col1);

CREATE FULLTEXT CATALOG ftcat
WITH ACCENT_SENSITIVITY = OFF

CREATE FULLTEXT INDEX ON ft_test  
(col2 LANGUAGE 1033)  
KEY INDEX UIX_test_Col1  
ON ftcat  
WITH STOPLIST = SYSTEM

注意:

  
      
  1. 在表的给定列中搜索给定模式。
  2.   
  3. 表中有超过2亿条记录。
  4.   
  5. 在必填列上创建了FULLTEXT索引。
  6.   

寻找效果最佳的搜索查询。

礼物:

  
      
  1. 模式:oh
  2.   
  3. 要搜索的列:col2
  4.   

预期输出:

col1    col2
----------------------
1       John A Henry

尝试:

  1. 使用全文索引:CONTAINS

    SELECT col1, col2
    FROM ft_test1
    WHERE CONTAINS(col2, '"*oh*"')  
    

无输出。

  1. 使用全文索引:FREETEXT

    SELECT col1, col2
    FROM ft_test1
    WHERE FREETEXT(col2, '"*oh*"')  
    

无输出。

  1. 使用模式索引:PATINDEX

    SELECT col1, col2
    FROM ft_test1
    WHERE PATINDEX('%oh%',col2)>0
    

得到一个输出。

执行计划:Table Scan

  1. 使用字符表达式:CHARINDEX

    SELECT col1, col2
    FROM ft_test1
    WHERE CHARINDEX('oh',col2)>0
    

得到一个输出。

执行计划:Table Scan

  1. 使用LIKE

    SELECT col1, col2
    FROM ft_test1
    WHERE col2 LIKE '%oh%'   
    

得到一个输出。

执行计划:Table Scan

0 个答案:

没有答案