gpt4 book ai didi

sql - 使用 UNION 提高来自多个表的插入查询的性能

转载 作者:行者123 更新时间:2023-12-02 04:25:43 25 4
gpt4 key购买 nike

我想一次将多个表插入到 1 个表中。

在此之前,我尝试合并所有表并从中创建一个新表,但这需要几个小时。

select * from tables_1_1
union
select * from tables_1_2
union
select * from tables_1_3
union
select * from tables_2_1
...
until
tables_35_3

我想,插入也许是解决方案,还是有更好的方法来做到这一点?

最佳答案

我认为你应该考虑两个因素:

  • 硬件和服务器规范
  • 数据大小

  • 如果您使用的机器规范不是很好,并且您有大量数据,那么分发 INSERT操作(多次插入)将提高性能,因为它不会像 UNION 那样消耗内存手术。
    如果数据大小可以接受并且可以由 SQL Server 分配的内存处理,那么您应该使用带有 SELECT INTO 的公用表表达式。询问:
    WITH CTE_1 as (SELECT * FROM TABLE_1 
    UNION ALL
    SELECT * FROM TABLE_2
    UNION ALL
    SELECT * FROM TABLE_3)
    SELECT *
    INTo New_Table
    FROM CTE_1

    另请注意 the difference between UNION and UNION ALL operations :

    A UNION statement effectively does a SELECT DISTINCT on the results set. If you know that all the records returned are unique from your union, use UNION ALL instead, it gives faster results. Also try to avoid INSERT INTO and use SELECT INTO instead because it is minimally logged assuming proper trace flags are set.



    另一件要提的事情,(我没有测试这种方法,但也许它应该提供更好的性能 - 它可能会导致巨大的索引大小)您还应该尝试创建一个 indexed view遍历所有表(您提到的 UNION 查询),然后执行查询,例如:
    SELECT * INTO ...  FROM vw_Unified

    更新 1

    如果您熟悉 SSIS,执行数据导入过程可能会在使用 SSIS 时提供更好的性能:
  • Data Import Performance Comparison T-SQL vs SSIS for large import
  • SSIS for table-to-table inserts vs. (SQL only) INSERT INTO () SELECT FROM approach
  • Implementing Foreach Looping Logic in SSIS
  • 关于sql - 使用 UNION 提高来自多个表的插入查询的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54602729/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com