Производительность запроса шаблона поиска - PullRequest
0 голосов
/ 27 декабря 2018

У меня есть следующие примеры данных для понимания требования.

Таблица:

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. У меня в таблице более 200 миллионов записей.
  3. Создан индекс FULLTEXT для необходимого столбца.

Поиск наиболее эффективного поискового запроса.

Givens:

  1. Шаблон: oh
  2. Столбец для поиска: col2

Ожидаемый результат:

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

Попробуйте:

  1. Использование индекса FULLTEXT: CONTAINS

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

Нет вывода.

Использование индекса FULLTEXT: FREETEXT

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

Нет вывода.

Использование индекса индекса: PATINDEX

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

Получен вывод.

План выполнения: Table Scan

Использование символьного выражения: CHARINDEX

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

Получен вывод.

План выполнения: Table Scan

Использование LIKE.

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

Получен вывод.

План выполнения: Table Scan

...