sql server—以最高效的方式处理一组值 我有一个服务器应用程序(用C++编写,客户机同样),它服务6种不同类型的Cults(TCP/IP),这些客户使用一个数据库(SQL Server)。 客户端可以要求服务器使用XML执行某些查询。 我不能在一个查询中发送多个语句

sql server—以最高效的方式处理一组值 我有一个服务器应用程序(用C++编写,客户机同样),它服务6种不同类型的Cults(TCP/IP),这些客户使用一个数据库(SQL Server)。 客户端可以要求服务器使用XML执行某些查询。 我不能在一个查询中发送多个语句,sql,sql-server,Sql,Sql Server,我被一个问题困住了 目标是: 从csv文件加载数据(约8000多条记录);(需要67毫秒) 在数据库(大约4个表)中检查它们是否可以通过一些评估 如果通过评估,则将其插入某个表中 将处理结果发送给客户端 我的解决方案是读取整组值并将其传递给db进行处理,然后接收结果 因为我不是sql server性能方面的专家,也不是他所有可用工具的专家,所以我想征求您的意见 如何在sql server中更有效地执行此操作? 将解析后的值作为字符串传递给sql server过程 ('v11'、'v12'、'

我被一个问题困住了

目标是:
  • 从csv文件加载数据(约8000多条记录);(需要67毫秒)
  • 在数据库(大约4个表)中检查它们是否可以通过一些评估
  • 如果通过评估,则将其插入某个表中
  • 将处理结果发送给客户端
我的解决方案是读取整组值并将其传递给db进行处理,然后接收结果

因为我不是sql server性能方面的专家,也不是他所有可用工具的专家,所以我想征求您的意见

如何在sql server中更有效地执行此操作?
  • 将解析后的值作为字符串传递给sql server过程
  • ('v11'、'v12'、'v13'、…、'v17')、…、('vn1'、'vn2'、'vn3'、…、'vn7')

  • 或者使用游标或任何其他可用方式将它们插入到程序要处理的表中
  • 如果是第一个解决方案,则:
    • 如何(有效地)遍历它
    • 是否可以将它们作为不同的类型传递(这可以加快过程)
    我不知道哪一个最好,因为我不是数据库专家。在90%左右,我使用C++多于SQL。
    我正在寻找最佳解决方案。无论谁对优化感兴趣,我都提出了下一个解决方案,它给我的执行时间不到1秒(我使用了sets方法,我在22000多条记录上进行了测试,只花了略多于1秒的时间),而使用我们的数据库“Specialist”的方法只需9分钟在我们的生产数据库中得到并有长达1小时的指数增长

    • 我必须处理8000多条记录
    • 评估4个表中的每条记录
    • 如果记录通过评估,则将其插入目标表
    请考虑我这样做的时候的想法:

  • 尽可能使用集合方法(避免光标)
  • 将所有数据插入一个缓冲表
    dbo.buff
    。(每次插入不超过1000条记录)
  • 创建一个可执行以下操作的过程:
    • 创建临时表以保存通过评估的记录的id
    • dbo.buff
      中的id保存到临时表中
      
      作为tmp选择id插入@temp
      从dbo.buff左连接
      在…上
      其中.id不为NULL
      
    • 避免在代码中的任何地方使用运算符
      (如果您使用的是大型集合),最好重复
      插入
      查询,但要在
      之后添加条件(在我的情况下,添加
      (从不到1秒到11秒),性能会大幅下降
    • 最后,它做到了:
      
      插入目标_表(字段)
      从@tmp中选择(字段)作为tmp
      内部连接dbo.buff作为tmp.id=bf.id上的bf
      
    • 您可以返回一个整数值,以指示所有记录是否通过评估(对于进一步的处理,它取决于您)
  • 每次必须处理这些记录时,都要将它们插入缓冲区表,然后调用该过程

    此解决方案比检查每个记录快得多

    另外,如果我没有说明我问题中的所有细节,我很抱歉(我知道这是非常抽象的,我的目标确实取决于细节)。我只是不被允许分享它们