0

わかりました、ここに質問があります、2つ以上のテーブルのmysqlの巨大なリターンセットに値するテーブルを結合していますか?(2つのテーブルの場合はそうかもしれませんが、それ以上ですか?)ここに状況があります:

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*/
]

したがって、3つのmain_subテーブルはすべて1(main)からmany(subs_tables)の関係にあります。つまり、mainの1つの行には、他のテーブルの複数の行があります。ここに質問があります:

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 に答える