gpt4 book ai didi

mysql - CREATE TEMP TABLE AS 与 INSERT INTO SELECT 之间的性能

转载 作者:行者123 更新时间:2023-11-30 00:23:12 25 4
gpt4 key购买 nike

我想知道以下之间是否存在性能差异:

query 1: CREATE TEMPORARY TABLE temp_table1 AS SELECT * FROM lookup_table JOIN ...

然后

INSERT INTO dest_table SELECT * FROM temp_table1

对比

query 2: INSERT INTO dest_table SELECT * FROM lookup_table JOIN ... 

我担心的是,lookup_table 经常被不同的用户访问,当我运行查询 2 时,大多数用户需要等待更长的时间才能检索结果。我的想法是将数据写入临时表,然后再写入 dest_table 。我只是不确定写入临时表与直接写入目标表相比是否会产生不同的性能。我使用 mysql 5.6。

我需要将数据从lookup_table写入dest_table的原因是因为我需要从中创建一个报告。看到lookup_table 中的查询有多复杂,创建报告变得非常困难,因此我决定将这些数据移动到单个表中,然后从中制作报告。

最佳答案

您担心填充此临时表的 SELECT 查询所花费的锁定时间。

这些表的实现方式相同,因此在任何一种情况下创建的成本都非常接近。

通过在 MEMORY 访问方法中创建临时表,您也许可以让它运行得更快一些,但我怀疑差异很小;这里涉及的工作是 SELECT/JOIN 的东西。

通过确保目标表在创建时没有索引,也许可以使其运行得更快。 CREATE ... AS SELECT 会做到这一点。

您将能够通过摆脱 SELECT *(无论如何都会在 JOIN 上产生冗余列)来降低创建成本,而是指定您真正需要的列。

但是,最好的办法是弄清楚为什么要创建此表,并看看是否可以通过针对源表编写查询来满足这些要求。如果您使这些查询操作变得高效,您就可以节省大量的数据改组。

关于mysql - CREATE TEMP TABLE AS 与 INSERT INTO SELECT 之间的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23072779/

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