MySQL高效表重复

时间:2016-04-09 22:42:31

标签: mysql

我有一个相对昂贵的过程,需要一个“自我加入”,这会堵塞我的计算时间。请考虑以下脚本:

CREATE TEMPORARY TABLE tempdb.table1
SELECT * FROM db.sometable WHERE {condition};
ALTER TABLE tempdb.table1 ADD INDEX idx_t({columns for join});

CREATE TEMPORARY TABLE tempdb.table2
SELECT * FROM tempdb.table1;
ALTER TABLE tempdb.table2 ADD INDEX idx_t({columns for join});

在这种情况下,我需要在尝试连接之前计算两次索引。如果我使用'LIKE'运算符创建第二个表,则将使用索引结构创建新表,但在填充表时仍需要处理。

有没有办法完全复制表,索引和所有步骤?它会大大缩短计算时间,因为它只需要为这个新表找到内存而不是重新执行大量计算。正如评论中所提到的,这是我经常遇到各种应用程序的问题。我对这个问题的目标不是优化特定的应用程序,而是希望获得有关此问题的信息。

1 个答案:

答案 0 :(得分:0)

使用' LIKE'创建表格。你提到过的运营商。 然后,在从源表复制数据之前禁用索引。 像这样:

CREATE TABLE destdb.table1 LIKE srcdb.table1;
ALTER TABLE destdb.table1 DISABLE KEYS;
INSERT INTO destdb.table1 SELECT * FROM srcdb.table1;
ALTER TABLE destdb.table1 ENABLE KEYS;