代码之家  ›  专栏  ›  技术社区  ›  Incognito

以最佳性能将数据插入到SQL Server中

  •  3
  • Incognito  · 技术社区  · 16 年前

    我有一个密集使用DB(SQL Server)的应用程序。

    因为它必须具有高性能,所以我想知道将记录插入数据库的最快方法。从执行时间的角度来看,这是最快的方法。

    我应该使用什么?

    正如我所知,最快的方法是创建存储过程并从代码(ADO.NET)调用它。 请告诉我有没有更好的方法,或者可能有一些其他的做法来提高性能。

    4 回复  |  直到 16 年前
        1
  •  1
  •   Amy B    16 年前

    请告诉我有没有更好的方法,或者可能有一些其他的做法来提高性能。

    • 不要为每个记录打开一个连接。了解连接池通常如何阻止您无意中打开每个记录的一个连接。
    • 如果可能,不要为每个记录打开一个事务。同时,不要让交易在不适当的时间段内处于未结状态。
    • 考虑表设计:索引/约束很少且没有触发器的窄表。
    • 如果您需要快速插入,因为您是一个Web应用程序,现在需要将页面返回给用户,或者您是一个WinForm应用程序,并且正在UI线程上阻塞,请考虑在其他线程上执行插入异步。
    • 如果需要快速插入来导入一百万行文件,请考虑进行大容量插入。
    • 如果您只想存储数据,而不是查询数据…考虑改用基于文件的解决方案。
        2
  •  3
  •   SQLMenace    16 年前

    大容量插入是最快的,因为它的日志记录最少,也许您可以使用sqlbackcopy类

        3
  •  2
  •   John Saunders    16 年前

    “这要视情况而定”。

    • 您要插入多少行?
    • 它们的插入频率是多少?
    • 同时还将进行哪些其他数据库操作?
    • 是因为用户操作(单击按钮)还是因为一些外部刺激而插入行?

    基于您的更新,我认为您应该考虑除简单代码之外的机制。查看针对批量数据库操作优化的SQL Server集成服务。您需要的可能是一个简单的SSIS作业,它定期运行,以便对满足特定条件的所有“新”数据进行大容量插入。如果有必要的话,它将允许随着时间的推移修改使用临时表或中间服务器之类的东西。

        4
  •  0
  •   egrunin    16 年前

    你算好了吗?2m/天=83k/小时=1388/分=23/秒。

    在每秒23次插入的情况下,SQL Server不会大吃一惊。

    推荐文章