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