You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何优化SQL Navigator中10000条记录的INSERT脚本以提升插入速度?

加快批量插入10000条记录的优化建议
  • 改用批量INSERT语句
    把10000条单条INSERT合并成一条带多个VALUES的语句,大幅减少数据库的语句解析和网络交互次数:

    INSERT INTO Customers (CustomerName, ContactName, Address, City, PostalCode, Country)
    VALUES 
    ('Cardinal', 'Tom B. Erichsen', 'Skagen 21', 'Stavanger', '4006', 'Norway'),
    ('Alex', 'Alex Perera', 'Abcd 300', 'Stavanger', '4006', 'Norway'),
    ...
    ('Bimesh', 'Bimesh Perera', '97 Elgern', 'London', '2008', 'UK');
    

    注意:部分数据库对单条语句的VALUES数量有上限,可以分成若干个批量(比如每1000条一组)。

  • 临时禁用约束与触发器
    插入前临时关闭表上的非必要约束(如外键约束)和触发器,避免每条插入都触发检查或业务逻辑,插入完成后再恢复:

    -- 禁用外键约束(替换为实际约束名)
    ALTER TABLE Customers DISABLE CONSTRAINT FK_Customers_Orders;
    -- 禁用触发器(替换为实际触发器名)
    ALTER TRIGGER trg_Customers_Audit DISABLE;
    
    -- 执行批量插入操作
    
    -- 恢复约束和触发器
    ALTER TABLE Customers ENABLE CONSTRAINT FK_Customers_Orders;
    ALTER TRIGGER trg_Customers_Audit ENABLE;
    
  • 关闭自动提交,手动批量提交
    把所有插入操作放在一个事务中,最后一次性提交,减少日志写入的频率:

    -- 关闭自动提交
    SET AUTOCOMMIT OFF;
    
    -- 执行所有批量INSERT语句
    
    -- 手动提交事务
    COMMIT;
    
  • 临时移除非必要索引
    插入前删除表上的非主键/唯一索引,插入完成后重建索引。因为每条插入都要更新索引,10000条记录会产生大量索引维护开销:

    -- 删除索引(替换为实际索引名)
    DROP INDEX idx_Customers_City;
    
    -- 执行批量插入操作
    
    -- 重建索引
    CREATE INDEX idx_Customers_City ON Customers(City);
    
  • 使用高效的数据导入工具
    如果是Oracle数据库(SQL Navigator常用于Oracle),优先使用SQL*Loader或外部表导入,这些工具的批量导入效率远高于普通INSERT语句,适合大规模数据插入。

  • 调整SQL Navigator运行设置

    • 关闭SQL Navigator的实时结果刷新、自动格式化等后台功能,减少客户端资源消耗;
    • 使用“执行脚本”模式而非逐条执行,避免客户端与数据库的频繁交互。

内容的提问来源于stack exchange,提问作者Lakshitha Perera

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 14:02:22