代码之家  ›  专栏  ›  技术社区  ›  MAK

搜索模式的查询性能

  •  0
  • MAK  · 技术社区  · 7 年前

    我有以下的样本数据来理解需求。

    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. 已在所需列上创建全文索引。

    1. 图案: oh
    2. col2

    预期产量:

    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
      

    得到一个输出。

    执行计划: 表格扫描

    1. 使用 LIKE .

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

    得到一个输出。

    执行计划:

    0 回复  |  直到 7 年前
    推荐文章