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秒。
如何优化此查询?
谢谢。
答案 0 :(得分:0)
不要使用IN ( SELECT ... )
;将其更改为JOIN:
SELECT t.*
FROM TablaUnoOriginal AS t
JOIN
( SELECT DISTINCT CampoID
FROM Key_Table ) AS k USING(CampoID);
这假设TablaUnoOriginal
在CampoID上包含INDEX(或PRIMARY KEY)。
答案 1 :(得分:0)
在简单联接中使用DISTINCT
:
INSERT INTO TablaUnoCopia
SELECT DISTINCT t.*
FROM TablaUnoOriginal t
JOIN Key_Table k ON t.CampoID = k.CampoID
确保CampoID
上有索引。
答案 2 :(得分:0)
如果TablaUnoCopia开始为空,则CampoID是Key_Table表的PK。
执行以下查询:
EXPLAIN INSERT INTO TablaUnoCopia
SELECT * FROM TablaUnoOriginal
在CampoID IN中(SELECT CampoID FROM keysTempTable);
显示以下内容:
Select_type | table | type | posibble_key | key | key_len| ref | rows | extra
-
SIMPLE - keysTempTable - ALL - NULL - NULL- NULL- NULL- 1279 - Start_temporary
===================================================================
SIMPLE - TablaUnoOriginal- eq_ref - PRIMARY - PRIMARY - 4 -Database_name.keysTempTable.CampoId - 1 - End_temporary