SQL Server:正常索引与全文索引

Ale*_*lex 18 sql-server fulltext-index

全文索引与varchar列上的常规索引之间的区别(以及优点/缺点)究竟是什么?我什么时候会使用哪个索引?

我有很多varchar列(地址 - 城市名称,街道名称等),我需要以最高性能的方式搜索,我正在尝试找出要使用的索引类型和原因.

谢谢!

Joe*_*orn 21

这取决于您想要进行的搜索类型.例如,您不能对此查询使用普通索引:

SELECT * FROM [MyTable] WHERE [MyColumn] LIKE '%' + @SearchText + '%'
Run Code Online (Sandbox Code Playgroud)

这不是可以理解的.这是可以理解的,但选择性可能不是很好:

SELECT * FROM [MyTable] WHERE [MyColumn] LIKE @SearchText + '%'
Run Code Online (Sandbox Code Playgroud)

您完全不同地使用全文索引:

SELECT * FROM [MyTable] WHERE CONTAINS([MyColumn], @SearchText)
Run Code Online (Sandbox Code Playgroud)

  • sargable 的提及很棒 - 我觉得这还不够教。 (2认同)

mar*_*c_s 10

通常,在使用普通索引进行搜索时,您只能在单个字段中搜索,例如"查找以A开头的所有城市"或类似的内容.

全文索引允许您搜索多个列,例如在街道,城市,省等搜索.如果您想要执行类似Google搜索的搜索,那么这可能是一个优势 - 只需插入搜索字词并找到所有内容在任何varchar列中的任何位置具有该搜索项的行.

此外,通过常规搜索,您可以做的事情相当有限 - 您可以搜索完全匹配或只是喜欢 - 就是这样.

使用全文索引,您可以通过指定自己的同义词库来搜索单词表单(运行,运行等)以及类似单词.如果这是一个问题,您可以基于多种语言进行搜索.您可以搜索具有两个或更多相互"近"的术语的条目.