【发布时间】:2015-03-06 21:57:47
【问题描述】:
我用的是Mysql,我有一个大约有80万条记录的表(TablaUnoOriginal),我需要将数据复制到另一个表(TablaUnoCopia)然后删除原始数据,我这样做如下:
INSERT INTO TablaUnoCopia
SELECT * FROM TablaUnoOriginal
WHERE CampoID in (SELECT DISTINCT (CampoID) FROM Key_Table);
在这部分查询“SELECT DISTINCT (CampoID) FROM Key_Table”返回了552条记录。
CampoID 是 TablaUnoOriginal 和 Key_Table 表中的索引列(主键)。
以下查询返回大约 150 条记录,无论如何执行都需要 7 秒。
SELECT DISTINCT (CampoID) FROM Key_Table
当您运行查询时,插入 1104 行需要 446 秒。
如何优化这个查询?
谢谢。
【问题讨论】:
-
您可以考虑将子查询推送到临时表中,以防止其被多次执行。
-
@jtimperley:你怎么知道它被执行了多次而没有看到
EXPLAIN的结果? -
TablaUnoCopia一开始是空的吗?EXPLAIN告诉您有关此查询的什么信息?CampoID是单独作为Key_Table的 PK,还是作为复合 PK 的一部分?如果是这样,它是那个键的 first 部分吗?
标签: mysql performance optimization query-optimization