好奇心の喪失から、これらのコードセグメントのどれが、大規模に実装された場合、パフォーマンス時間が短縮されますか?DBアイテムを個別に取得するパフォーマンスとPHPをループするの比較
テーブルメンバーがいて、写真を取得したいとします。
方法1
$members = $db->query('SELECT * FROM members ORDER BY id ASC');
foreach($members as $m)
$memberIDs[] = $m['id'];
$photos = $db->query('SELECT * FROM photos WHERE member IN'.join(',', $memberIDs).' ORDER BY id ASC');
foreach($photos as $p) {
// multi_arr_search(search_val, search_column, search_array) returns parent key in multi dimensional array
$memberArrayKey = multi_arr_search($p['member'], 'id', $members);
$members[$memberArrayKey]['photos'][] = $p;
}
OR
方法2
$members = $db->query('SELECT * FROM members ORDER BY id ASC');
foreach($members as $k=>$m)
$members[$k]['photos'] = $db->query('SELECT * FROM photos WHERE member='.$m['id'].' ORDER BY id ASC');
方法1少ないクエリが実行されてになりますが、より多くのPHPの作業が必要となるでしょう。
方法3 - 単一のクエリでJOINを使用します。しかし、間違いなく#2ではなく、クエリごとにオーバーヘッドがあるため、より多くのクエリを実行するほど遅くなります。 –