我有以下示例数据以了解需求。
表格:
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
注意:
- 在表的给定列中搜索给定模式。
- 表中有超过2亿条记录。
- 在必填列上创建了FULLTEXT索引。
寻找效果最佳的搜索查询。
礼物:
- 模式:
oh
- 要搜索的列:
col2
预期输出:
col1 col2
----------------------
1 John A Henry
尝试:
使用全文索引:CONTAINS
SELECT col1, col2
FROM ft_test1
WHERE CONTAINS(col2, '"*oh*"')
无输出。
使用全文索引: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