究竟是什么区别(和优势/劣势)一个全文索引和VARCHAR列普通索引之间? 当我将使用哪个指数?
我有VARCHAR列(地址 - 城市名称,街道名称等)的大量,我需要被搜索的最高效的方式,我试图找出使用哪个索引类型和原因。
谢谢!
究竟是什么区别(和优势/劣势)一个全文索引和VARCHAR列普通索引之间? 当我将使用哪个指数?
我有VARCHAR列(地址 - 城市名称,街道名称等)的大量,我需要被搜索的最高效的方式,我试图找出使用哪个索引类型和原因。
谢谢!
这取决于那种你想要做搜索的。 例如,你不能使用普通索引与此查询:
SELECT * FROM [MyTable] WHERE [MyColumn] LIKE '%' + @SearchText + '%'
它不是可优化搜索 。 这是优化搜索,但选择性可能不是很好:
SELECT * FROM [MyTable] WHERE [MyColumn] LIKE @SearchText + '%'
您可以使用全文索引完全不同:
SELECT * FROM [MyTable] WHERE CONTAINS([MyColumn], @SearchText)
通常情况下,用普通索引搜索时,你只能在一个字段进行搜索,如“发现,以A开头的所有城市”之类的东西。
全文索引,可以跨多个列一次在街上,市,省等,如果你想要做的事就像一个谷歌式搜索这可能是一个优势进行搜索,比如搜索 - 只是打一个搜索词,发现所有有在任何VARCHAR列的任何地方,搜索词行。
此外,与常规的搜索,你是非常有限的,你可以做什么 - 你可以搜索精确匹配或只是想 - 这就是它。
随着全文索引,可以指定自己的词库搜索词形式(RAN,运行等),也为类似的话。 你可以搜索基于几种语言,如果这是一个问题。 您可以搜索有两个或两个以上的术语是“近”彼此的条目。
渣
从MSDN :
相较于全文检索,在LIKE的Transact-SQL谓词适用于只是字符模式。 此外,您不能使用LIKE谓词来查询格式化的二进制数据。 此外,对大量的非结构化的文本数据的一个LIKE查询比对相同的数据等效的全文查询慢得多。
对数以百万计的文本数据可能需要几分钟,返回的行的LIKE查询; 而全文查询可能只需要几秒钟或更少的针对相同的数据,根据返回的行数。