Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server:普通索引与全文索引_Sql Server_Fulltext Index - Fatal编程技术网

Sql server SQL Server:普通索引与全文索引

Sql server SQL Server:普通索引与全文索引,sql-server,fulltext-index,Sql Server,Fulltext Index,varchar列上的全文索引和常规索引之间的区别(以及优点/缺点)到底是什么?我什么时候会使用哪个索引 我有许多varchar列(地址-城市名称、街道名称等),我需要以最高效的方式进行搜索,我正试图找出使用哪种索引类型以及原因 谢谢大家! 这取决于您要执行的搜索类型。例如,您不能在此查询中使用普通索引: SELECT * FROM [MyTable] WHERE [MyColumn] LIKE '%' + @SearchText + '%' 不是。这是sargable,但可能不是很好: SEL

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

我有许多varchar列(地址-城市名称、街道名称等),我需要以最高效的方式进行搜索,我正试图找出使用哪种索引类型以及原因


谢谢大家!

这取决于您要执行的搜索类型。例如,您不能在此查询中使用普通索引:

SELECT * FROM [MyTable] WHERE [MyColumn] LIKE '%' + @SearchText + '%'
不是。这是sargable,但可能不是很好:

SELECT * FROM [MyTable] WHERE [MyColumn] LIKE @SearchText + '%'
您使用全文索引的方式完全不同:

SELECT * FROM [MyTable] WHERE CONTAINS([MyColumn], @SearchText)

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

全文索引允许您跨多个列进行搜索,例如,在街道、城市、省份等进行一次搜索。如果您想进行类似谷歌风格的搜索,这可能是一个优势—只需输入搜索词,并在任何varchar列中的任何位置查找所有具有该搜索词的行

此外,通过常规搜索,您所能做的事情相当有限—您可以搜索精确匹配或类似的内容—仅此而已

使用全文索引,您可以通过指定自己的同义词库来搜索单词形式(ran、run等),也可以搜索类似的单词。如果这是一个问题,您可以基于多种语言进行搜索。您可以搜索包含两个或多个彼此“接近”的术语的条目

Marc

来自:

与全文搜索不同,LIKE Transact-SQL谓词仅适用于字符模式。此外,不能使用LIKE谓词查询格式化的二进制数据。此外,针对大量非结构化文本数据的LIKE查询要比针对相同数据的等效全文查询慢得多

针对数百万行文本数据的类似查询可能需要几分钟才能返回;而根据返回的行数,针对相同数据的全文查询只需几秒钟或更短的时间


有什么理由不使用全文索引吗?它们占用了大量的磁盘空间,重新计算的速度也很慢。sargable提到的内容太棒了——我觉得这方面的内容还不够多。+1介绍了为什么要使用全文索引的实际原因,而不仅仅是对语法和兼容操作的评论。