У меня есть следующие примеры данных для понимания требования.
Таблица:
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
Примечания:
- Поиск заданного шаблона в указанном столбце таблицы.
- У меня в таблице более 200 миллионов записей.
- Создан индекс FULLTEXT для необходимого столбца.
Поиск наиболее эффективного поискового запроса.
Givens:
- Шаблон:
oh
- Столбец для поиска:
col2
Ожидаемый результат:
col1 col2
----------------------
1 John A Henry
Попробуйте:
Использование индекса 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