我有一个存储有关游戏世界的信息的数据库。具体来说,我有一个表格来存储所有不同的地图,还有一个表格来存储每个地图中的建筑物。一张地图可以有 0-n 个建筑物,我将信息存储如下:
地图(map_id(PK),map_name)
建筑物(building_id (PK)、building_name、map_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 查询?
综上所述,第一种方法似乎内存/带宽效率低下,第二种方法似乎 CPU 效率低下。我是对的吗?有更好的方法吗?