0

好的,这里的问题是,加入表是否值得为 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 个到主表的链接,结果集的大小已经失控。

4

1 回答 1

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
于 2012-07-24T14:12:10.507 回答