【问题标题】:Performance of like '%Query%' vs full text search CONTAINS querylike '%Query%' 与全文搜索 CONTAINS 查询的性能
【发布时间】:2023-03-16 11:54:02
【问题描述】:

我想搜索一个单词

对于这种情况,从性能的角度来看,哪个查询更好?

Select Col1, Col2 from Table Where Col1 Like '%Search%'

Select Col1, Col2 from Table Where Col1 CONTAINS(Col1,'Search')

?

【问题讨论】:

  • 我也很想知道:使用REGEXP 用于相同目的的查询的相对性能是什么?
  • 什么数据库?它们在不同的数据库中将具有完全不同的性能特征。
  • @Oded:MS-SQL Server 和 MySQL 是我最常用的两个。出于问题的目的,我假设 SQL Server 是最受关注的。
  • @dotnetguts 你能给我一个链接,我可以在其中阅读有关 CONTAINS 正确用法的信息...到目前为止,我所知道的是 A CONTAINS B 意味着 A 是 B 的超集。

标签: sql database performance full-text-search sql-like


【解决方案1】:

全文搜索(使用 CONTAINS)将比使用带通配符的 LIKE 更快/更有效。全文搜索 (FTS) 包括定义 FTS 可以使用的全文索引的能力。如果您打算使用该功能,我不知道您为什么不定义 FTS 索引。

左侧带有通配符的 LIKE(即:LIKE '%Search')不能使用索引(假设列存在索引),从而保证表扫描。我没有测试和比较,但正则表达式有同样的陷阱。澄清一下,LIKE '%Search'LIKE '%Search%' 可以使用索引; LIKE 'Search%' 可以使用索引。

【讨论】:

  • 在 MS SQL Server 中,需要全文索引才能使用 CONTAINS。
  • 它会比全文搜索引擎快吗.. 像 Lucene / Solr?特别是在数百万条记录的情况下。
【解决方案2】:

就像在 Table 上自行搜索一样,会扼杀性能。 最好在 CTE 上应用点赞搜索。

【讨论】:

【解决方案3】:

对于典型的数据库,假设适当的全文搜索索引建立在正在搜索的字段上,CONTAINS 搜索会快得多。 LIKE 运算符的求值一般不使用索引,因此必须读取所有数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-04
    • 2010-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-01
    相关资源
    最近更新 更多