說我有這樣的查詢,在那裏我參加了一些虛擬表:虛擬表連接的效率如何?
SELECT table1.a, tbl2.a, tbl3.b, tbl4.c, tbl5.a, tbl6.a
FROM table1
JOIN (SELECT x, a, b, c FROM table2 WHERE foo='bar') tbl2 ON table1.x = tbl2.x
JOIN (SELECT x, a, b, c FROM table3 WHERE foo='bar') tbl3 ON table1.x = tbl3.x
JOIN (SELECT x, a, b, c FROM table4 WHERE foo='bar') tbl4 ON table1.x = tbl2.x
JOIN (SELECT x, a, b, c FROM table5 WHERE foo='bar') tbl5 ON table1.x = tbl5.x
JOIN (SELECT x, a, b, c FROM table6 WHERE foo='bar') tbl6 ON table1.x = tbl6.x
WHERE anotherconstraint='value'
在我真正的查詢,每個連接都有自己的連接,聚合函數和WHERE限制。
這樣的查詢運行得如何/很差?另外,這與將所有單個虛擬表作爲其自己的查詢並將結果鏈接到SQL以外的結果有什麼不同?
你是說,反對真正的表連接?簡介它!它將取決於很多因素,其中很多因素將取決於您的數據/模式。而且,將結果鏈接到SQL之外很可能會慢很多。如果你看到巨大的性能問題,你可能需要在所有表中的索引超過x或foo –
在我真正的查詢中,每個JOIN都有許多其他WHERE子句約束,附加連接和聚合函數,這就是爲什麼我將它們分開作爲虛擬桌面。也許有更好的方法去做呢? –
如果每個子查詢都很複雜,那麼您真的應該對其進行配置。查看執行計劃並瞭解如何閱讀它們。 –