gpt4 book ai didi

c# - SQL Server 全文搜索 - 大型查询

转载 作者:行者123 更新时间:2023-11-30 12:38:06 25 4
gpt4 key购买 nike

我正在使用 SQL Server 2014 中的全文搜索查询使用 C# 编写应用程序。用户需要能够使用包含多达 100 000 个参数的非常大的查询来搜索数据库。例如:

FTS 查询:

SELECT * FROM Client WHERE contains(Name, '"John" OR "Sarah"') 

LIKE 查询:

SELECT * FROM Client WHERE Name in ('John', 'Sarah')

除了不是 2 个名字,我们有 100 000 个名字。显然,这超出了SQL支持的最大查询长度。该数据库包含超过 100 万条记录。在某些情况下,我需要查找以指定字符串开头的客户端名称,这就是 FTS 优于“in”或“like”子句的原因。除了将请求分成许多 block 之外,是否有一些聪明的方法可以绕过它?有没有比使用 SQL 数据库更好的替代方法?

我也尝试过使用 Lucene.NET 实现搜索,但是为超过 100 万条记录生成索引需要很多小时,这是 Not Acceptable ,因为数据将每天同步。

最佳答案

当使用纯 SQL 时,我建议使用 sp_executesql。这允许您传递最多约 2100 个参数,每个名称一个。 SQL Server 将能够为该查询重新使用查询计划——不需要重新编译——所以速度很快。

通过创建 2100 个名称的批处理,您需要 48 个批处理;延迟应该相当低。另外,如果您使用多个连接,您可以并行启动它们。

https://learn.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-executesql-transact-sql?view=sql-server-2017

考虑快照隔离或“WITH NOLOCK”以防止数据重新加载期间出现延迟。

https://learn.microsoft.com/en-us/dotnet/framework/data/adonet/sql/snapshot-isolation-in-sql-server

https://www.mssqltips.com/sqlservertip/2470/understanding-the-sql-server-nolock-hint/

最后确保您设置了正确的索引并使用 SQL Profiler 检查实际的查询计划以验证情况是否如此。

关于c# - SQL Server 全文搜索 - 大型查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56024795/

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