gpt4 book ai didi

SQL Server 05,这是最佳的,LIKE %% 或 CONTAINS() 用于搜索大列

转载 作者:行者123 更新时间:2023-12-04 23:47:45 29 4
gpt4 key购买 nike

我有一个由另一位开发人员编写的函数,我正在尝试对其进行修改以用于稍微不同的用途。 SP 使用它来检查存储在 DB 中的文本文档中是否存在某个短语,如果找到该值则返回 1,否则返回 0。这是查询:

SELECT @mres=1 from documents where id=@DocumentID
and contains(text, @search_term)

该文档主要包含 XML,search_term 是格式为 nvarchar(40) 的 GUID。

这对我来说似乎运行得很慢(执行这部分过程需要 5-6 秒),但在同一个脚本文件中也有上面的这个版本,注释掉了。
SELECT @mres=1 from documents where id=@DocumentID
and textlike '%' + @search_term + '%'

这个版本的运行速度要快得多,与第一个示例的 15ms 相比需要 4ms。

所以,我的问题是为什么使用第一个而不是第二个?我认为这个开发人员(不再和我一起工作)有一个很好的理由,但目前我正在努力寻找它。

这可能与全文索引有关吗? (这是我正在使用的开发数据库,​​所以生产版本可能有更好的索引......)我对 FTI 并不是很了解,所以目前不太确定。想法/想法?

最佳答案

更新: Aggg - 我所有的答案都是错误的!

是的,CONTAINS确实在使用全文搜索(请参阅 http://msdn.microsoft.com/en-us/library/ms187787.aspx ),因此应该很快(或者至少应该正确缩放)

第二个版本(使用 LIKE )可能更快的原因是如果您的表不包含很多行 - 调用全文引擎进行搜索将产生少量额外开销,这可能意味着使用 LIKE对于小 table 来说稍微快一点。

另一方面,如果顶部查询需要 5-6 秒来执行,那么我会说某处可能有问题 - 再次尝试查看执行计划。

关于SQL Server 05,这是最佳的,LIKE %<term>% 或 CONTAINS() 用于搜索大列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2453338/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com