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

时间:2014-04-15 00:44:35

标签: mysql sql mysql-5.6

我想知道:

之间存在性能差异
query 1: CREATE TEMPORARY TABLE temp_table1 AS SELECT * FROM lookup_table JOIN ...

然后

INSERT INTO dest_table SELECT * FROM temp_table1

VS

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的查询有多复杂,这使得创建报告变得非常困难,所以我决定将这些数据移到一个表中,然后从中生成报告。

1 个答案:

答案 0 :(得分:0)

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

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

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

您可以通过确保目标表在创建时没有索引来提高速度。 CREATE ... AS SELECT会这样做。

你可以通过删除SELECT *(在任何JOIN上产生冗余列)来创建它更便宜,而是指定你真正需要的列。

但是,最好的办法是找出你创建这个表的原因,看看你是否可以通过对源表编写查询来满足这些需求。如果您使这些查询操作高效,那么您已经为自己节省了大量数据。