联合会破坏MySQL 5.6中的索引吗?

联合会破坏MySQL 5.6中的索引吗?,mysql,sql,Mysql,Sql,一个关于MySQL如何在引擎盖下工作的问题。假设我有两个表,表1和表2。它们在列和索引列中是相同的 如果我尝试运行涉及 ( SELECT * FROM table1 UNION SELECT * FROM table1 ) as allTable1 在中间,在新形成的allTable1的列上有where和join子句,如果索引被转换为新表,那么以前在table1/table1\u归档文件中声明的索引现在是否没有帮助 同样的问题,比如 SELECT IF table1.col1

一个关于MySQL如何在引擎盖下工作的问题。假设我有两个表,表1和表2。它们在列和索引列中是相同的

如果我尝试运行涉及

(

 SELECT * FROM table1 
 UNION 
 SELECT * FROM table1

) as allTable1 
在中间,在新形成的allTable1的列上有where和join子句,如果索引被转换为新表,那么以前在table1/table1\u归档文件中声明的索引现在是否没有帮助

同样的问题,比如

SELECT IF table1.col1 IS NULL THEN table1_archive.col1 ELSE table1.col1.

我正在使用MySQL 5.6。

从表1中选择*。。不要使用索引。。您正在执行完全扫描..(您没有where条件)派生表通常会阻止基础表上的任何索引。联盟只会让事情变得更糟,我就是这么想的。我们在工作中经常为一些项目这样做,这让我发疯,我的直觉是,只有一个索引良好的表要比有两个表快得多,然后合并它们或执行if/else,特别是因为它们最多只有几百万行。我只是想在向任何人提出更改我们在这里的操作方式之前确定一下。基于union的派生表很可能最终成为临时表。MySQL是否向派生表添加索引,可以通过查看解释来判断。如果在派生表和查询的其他部分之间看到ref或eqref类型的联接,那么MySQL确实添加了索引。看见