ゲームの世界に関する情報を格納するデータベースがあります。具体的には、さまざまなマップをすべて格納するテーブルと、各マップの建物を格納するテーブルがあります。マップには 0 ~ n の建物を含めることができ、次のように情報を保存します。
マップ(map_id (PK), map_name)
建物(建物 ID (PK)、建物名、地図 ID (FK))
私の問題は、データベースに効率的にクエリを実行して、マップとそのすべての建物の名前を取得する方法です。たとえば、10 個のマップとその建物を取得したいとします。
SELECT * FROM maps JOIN buildings USING (map_id) limit 10
上記のクエリは 10 行または 100 行を返す可能性がありますが、回答ごとに map_name が繰り返されるため、結果テーブル内に多くの重複があるのはかなり無駄に思えます。
または、最初に map_ids を取得してから、各マップに対して個別のクエリを実行することもできます。例えば。:
SELECT map_id from maps limit 10
foreach マップ + ID:SELECT * FROM buildings WHERE map_id = x
ただし、11 の個別の SQL クエリを実行しているため、これも無駄に思えますか?
要約すると、最初の方法はメモリ/帯域幅の効率が悪く、2 番目の方法は CPU の効率が悪いようです。私は正しいですか、より良い方法はありますか?