我经常将复杂的查询分解为临时表,以便我可以对它们进行评论并帮助我理解这些步骤。
这与mysql句柄内部嵌套连接的方式有很大不同吗?
e.g。 select * from t1,t2,t3,t4 where t1.id=t2.id and t2.id2 = t3.id2, t4.id3 = t3.id3
t1
上定义的索引是否被“转移”到mysql创建的任何内部表以保存中间结果?
显式定义临时表或使用一个完整嵌套连接的单个查询之间是否有明显的性能差异?
答案 0 :(得分:1)
索引不会转移到您明确创建的临时表。它们就像常规表一样,只是当你不再打开会话时它们会消失。数据库不知道表中的数据最初来自对具有索引的其他一些表的查询;一方面,自查询以来,您可能在临时表中插入/删除/更新了行。
我希望mysql能够使用它认为在运行连接时有用的任何索引,但索引必须在连接中的表上。