【问题标题】:Sql execution speed very slowsql执行速度很慢
【发布时间】:2011-04-04 06:37:09
【问题描述】:

我有 for 循环,在该循环中,我使用 INSERT INTO 命令获取 75000+ 个值。当我跑步时,它会消耗更多时间。如何提高插入速度,...

提前谢谢... rgs 塔林杜

【问题讨论】:

  • "当我运行时它会消耗更多时间。"不止于此?
  • 告诉我们您使用的是哪个 DBMS
  • @a_horse_with_no_name: 大声笑,我看到一个 SQL 问题并立即假设 SQL Server! :)
  • @Mitch Wheat:当我看到for-loop 时,我立即忽略了它。 :)

标签: sql for-loop


【解决方案1】:

如果您使用的是 SQL Server(未指定):不要使用多个单独的 INSERT 调用,而是使用 Bulk 方法,例如

【讨论】:

  • 我正在使用 WAMP,并且有名为 master 和 master_break 的表。主表有名为 start_number 和 no_of_items 的字段。所以我需要从主表中获取 start_number 和 no_of_items 并生成可能的数字...例如:start_number = 45620 no_of_items = 5
  • @tharindu:这真的很有趣。你希望我用这些信息做什么?
【解决方案2】:

如果你有一个包含 75k 插入的循环,那么你做错了

根据您的 cmets,您需要一些东西来为您生成行。

;WITH cNumbers AS
(
    SELECT ROW_NUMBER() OVER (ORDER BY c.id) - 1 AS rownum
    FROM sys.columns c CROSS JOIN start_number c2 CROSS JOIN start_number c3
)
SELECT
    c.rownum + m.start_number
FROM
    mastertable m
    CROSS JOIN
    cNumbers c
WHERE
    c.rownum <= no_of_items

有更好的方法来生成行,但这会比循环 75k 次更好。

编辑:相同的想法适用于大多数 RDBMS,除了没有窗口功能的 MySQL... 在这种情况下,我将有一个 Numbers 表,其中填充 1-100000,例如

【讨论】:

  • 他似乎在使用 MySQL
【解决方案3】:

一种解决方案可能是将要插入的数据写入文件,然后使用LOAD DATA INFILEin mysql 批量加载它。与拥有 75000 个单独的插入相比,它应该会大大加快速度。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-19
    • 1970-01-01
    • 2015-11-20
    • 2020-01-29
    • 1970-01-01
    • 2021-03-06
    • 2016-06-08
    • 2012-06-25
    相关资源
    最近更新 更多