我有一个相对昂贵的过程,需要一个“自我加入”,这会堵塞我的计算时间。请考虑以下脚本:
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'运算符创建第二个表,则将使用索引结构创建新表,但在填充表时仍需要处理。
有没有办法完全复制表,索引和所有步骤?它会大大缩短计算时间,因为它只需要为这个新表找到内存而不是重新执行大量计算。正如评论中所提到的,这是我经常遇到各种应用程序的问题。我对这个问题的目标不是优化特定的应用程序,而是希望获得有关此问题的信息。
答案 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;