代码之家  ›  专栏  ›  技术社区  ›  Denis Palnitsky

使用多个存储过程将大量数据添加到数据库中

  •  0
  • Denis Palnitsky  · 技术社区  · 14 年前

    我有3个存储过程 AddProduct , AddProductProperties AddOffer . 我需要使用此过程从数据库中的各种数据源导入数据。数据源的结构是可变的,因此它可能只包含产品或产品或两者。 我的算法是从数据源读取记录,然后调用必要的程序。 调用我使用的程序 MySqlCommand

    问题:

    1. 打电话最快的方法是什么 这样的程序?
    2. MySqlCommand命令 还是不重要?
    3. 如何缓存这些调用(对于我在跟踪日志中看到的每个调用记录) “检索元数据的过程” 程序重命名“)?
    2 回复  |  直到 14 年前
        1
  •  0
  •   Community Navdeep Singh    4 年前

    多记录SQL更新是关键

    速度和对插件的单独调用就像油和水一样(哦,这不是一个好的说法)。

    策略。。。

    • 将各种数据源导入与其布局匹配的临时表中。使用db的内置导入实用程序导入平面文件(或附加到其他数据库的表,或odbc等-如果可以使外部数据源显示为附加表,则可以跳过临时表部分)
    • 使用像INSERT INTO AddProduct这样的语句(选择。。。从TempProducts1)-或链接表-将一次放入所有记录
    • 如果必须从多个输入格式管理同一dest表中的冲突,那么仍然可以从sql批量查询中进行管理。
      • 那你就得用临时表了
      • 如果temp1胜过temp2那么
        Delete from temp2 where temp2.id in (select id from temp1) 
    • 放下临时表格。不要抱怨临时桌子!我打赌你不是多用户。我打赌你是DBA。极端速度=极端措施。

    有一次,我甚至改变了这样的方式,文件中的冲突项必须通过builk update/insert/delete查询和temp表从外部flatfile覆盖先前的项。用了5条以上的丑陋的sql语句。不好玩,但是比同一个盒子上的代码插入快100倍。这类似于单个SP执行插入操作(好吧,也许没那么糟,是vb4和access jet2.0:-)。但是,一个联网的客户端会因为往返等原因做得更糟。

    您还可以通过多记录SQL更新来治愈癌症。

        2
  •  2
  •   Dr. Wily's Apprentice    14 年前

    两条建议:

    MySqlCommand类有一个Prepare方法。如果您必须重复调用这些存储过程,那么我将使用它来尽量减少每次执行必须完成的工作量。以下是我认为可能涉及的步骤:

    1. 打开到数据库的连接

    2. 为每个命令调用一次Prepare方法

    3. 遍历数据

      4.2. 在命令的

    是否提供批量插入/批量复制选项?

    我对MySQL的熟悉程度不如sqlserver;Net具有大容量复制功能,您可以使用它将大量数据插入SQL Server。我不知道MySQL是否有类似的功能,但如果有,而且您有很多数据要插入,那么请考虑使用它,而不是重复调用存储过程。