我想知道两者之间是否存在性能差异?

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/

10-11 03:21
查看更多