【发布时间】:2012-07-24 22:51:14
【问题描述】:
我有以下表格,每个表格都有多条记录(~50k)并且表格正在增长。
Table1
BatchID ID Record1
Table 2
BatchID ID Record2
Table 3
BatchID ID Record3
Table 4
BatchID ID Record4
以下查询需要永远运行(因为连接是四个表的笛卡尔积)。
Select table1.batchid,
table1.ID,
table1.Record1,
table2.Record2,
Table3.Record3,
Table4.Record4
from Table1 JOIN Table 2
on table1.batchID = table2.batchID and table1.ID = table2.ID
JOIN table3
on table1.BatchID=table3.batchID and table1.ID = table3.ID
JOIN table4
on table1.ID = table4.ID and table1.batchID = table4.batchID
最好的方法应该是什么。
【问题讨论】:
-
batchid 和 id 都被索引了..
-
我假设那些 WHERE 实际上是 ON;如果不是,它们应该是,尽管实际上您可以通过使用 USING(id,batchid) 加入每个表来使这更整洁。除此之外,您所有的表都应该在 (id,batchid) 上有索引,仅此而已 - 我不希望这个查询真的花费超过几分之一秒。
-
需要 1) 结构/索引 2) 查询计划
-
那是一个错字..我已经更正了..它在..
-
哦,如果 (batchid,id) 是唯一组合,那么它应该是唯一键而不是索引,但是从这里的信息中我无法判断是否是这种情况。跨度>
标签: mysql sql database-design join