2012-02-29 138 views
2

我經常把我複雜的查詢分解成臨時表,這樣我可以評論它們並幫助我理解步驟。索引和嵌套聯接

這是否與mysql內部的mysql句柄嵌套連接有很大不同?

例如select * from t1,t2,t3,t4 where t1.id=t2.id and t2.id2 = t3.id2, t4.id3 = t3.id3

t1定義的索引是否被「結轉」到mysql創建的任何內部表以保存中間結果?

在顯式定義臨時表或使用一個充滿嵌套聯接的單個查詢之間性能是否有明顯差異?

回答

1

索引不會轉移到您明確創建的臨時表中。它們就像普通表格一樣,只是當你不再打開會話時它們會消失。數據庫不知道表中的數據最初來自其他一些有索引的表上的查詢;一方面,您可能在查詢後在臨時表中插入/刪除/更新了行。

我希望mysql能夠使用它在運行連接時認爲有利的任何索引,但索引必須位於連接的表中。