【问题标题】:sql insert- 1 big query, or many single queriessql insert- 1 个大查询,或许多单个查询
【发布时间】:2011-12-26 01:50:33
【问题描述】:

我正在使用 PHP 与 MSSQL 数据库的 odbc 连接。

目前,我有大约 1900 个插入语句,在一个字符串中,用分号分隔,并在 1 个 odbc_execute 语句中运行。

首先,这是一种不好的方法吗?我应该在 for 循环中分别处理每个插入语句吗?

另外,我目前使用 1 个大语句的方式,由于某种原因,最多只能插入 483 行而没有错误。如果我复制运行的语句并通过 SQL Studio 运行它,所有行都会插入,但每次最多只能插入 483 行。 任何想法为什么会这样?

【问题讨论】:

    标签: php sql sql-server insert odbc


    【解决方案1】:

    每个 INSERT 一次网络往返意味着大量延迟。会很慢。

    所有这些连接的 SQL 语句的缓冲区大小可能存在限制。

    我认为您想使用准备好的语句和绑定变量:

    http://msdn.microsoft.com/en-us/library/windows/desktop/ms712553(v=vs.85).aspx

    您仍然可以循环处理它 - 实际上是两个。您需要一个内部循环将 INSERT 添加到作为单个事务执行的批处理中,并需要一个外部循环来处理所有必要的批处理。

    【讨论】:

    • 那么这与基本上说将每 100 行放入一个数组中,然后在该数组上循环执行相同的 odbc_execute 语句相同吗?
    【解决方案2】:

    只要您不为每个插入运行单独的事务,一次插入一个就没有问题。

    对于这种“批量插入”,我通常会为每 100 行左右运行一次事务。

    我会避免一次将它们全部塞进去。这样做并没有什么真正的收获。

    【讨论】:

      【解决方案3】:

      您可以将数据放在 sql-server 上的文件(xml?)中,并从 php 请求一个存储过程来处理它。

      问候, /t

      【讨论】:

        猜你喜欢
        • 2011-09-12
        • 1970-01-01
        • 1970-01-01
        • 2012-04-08
        • 2013-04-28
        • 1970-01-01
        • 1970-01-01
        • 2013-04-29
        • 1970-01-01
        相关资源
        最近更新 更多