巨大的返回设置mysql连接多个表一对多的关系

时间:2012-07-24 14:07:29

标签: mysql parsing join

好的,这就是问题,是加入表值得为两个表的mysql的巨大回报集?(对于两个表是的,但更多?) 情况如下:

table : main[
idmain (pk)
someotherid (key)
/*some other fields*/
]
table : main_sub[
idmainsub (pk)
idmain (key)
/*some other fields*/
]
table : main_sub2[
idmainsub2 (pk)
idmain (key)
/*some other fields*/
]
table : main_sub3[
idmainsub3 (pk)
idmain (key)
/*some other fields*/
]

所以这三个main_sub表都有一个(主)到多个(subs_tables)关系,这意味着main中的一行在其他表上有多行。 这是一个问题:

SELECT * FROM `main`
INNER JOIN `main_sub` ON `main`.`idmain`=`main_sub`.`idmain` 
INNER JOIN `main_sub2` ON `main`.`idmain`=`main_sub2`.`idmain`
INNER JOIN `main_sub3` ON `main`.`idmain`=`main_sub3`.`idmain`
WHERE `main`.`someotherid`=1
vs.
SELECT * FROM `main` WHERE `main`.`someotherid`=1;
and then 
SELECT * FROM `main_sub` WHERE `main_sub`.`idmain`=(idmainfromfirstquery);
SELECT * FROM `main_sub2` WHERE `main_sub2`.`idmain`=(idmainfromfirstquery);
SELECT * FROM `main_sub3` WHERE `main_sub3`.`idmain`=(idmainfromfirstquery);

对于4个查询,连接是否值得进行巨大的结果集和解析?即使是微型表,所有子表包含5个链接,每个链接到主,结果集的大小失控。

1 个答案:

答案 0 :(得分:0)

单个查询将更快而不是循环:

SELECT * FROM `main`
INNER JOIN `main_sub` ON `main`.`idmain`=`main_sub`.`idmain` 
INNER JOIN `main_sub2` ON `main`.`idmain`=`main_sub2`.`idmain`
INNER JOIN `main_sub3` ON `main`.`idmain`=`main_sub3`.`idmain`
WHERE `main`.`someotherid`=1