我有一段代码可以通过它们的 ID 在数据库中查找几张 CD。这是使用“IN”条件完成的:
(1) SELECT * FROM album WHERE id IN (?,?,?,?,?)
下一步是获取与这些专辑相关的曲目。我通过稍微修改“基本”查询来做到这一点。
(2) SELECT track.* FROM album
LEFT JOIN track ON track.album_id = album.id
WHERE album.id IN(?,?,?,?,?)
现在,我有专辑和曲目。但是,我需要加载曲目的作曲家详细信息。由于几个原因,我不能与上面的查询一起做,所以我需要单独做。
我可以做的是根据我拥有的曲目查找作曲家,我将使用曲目 ID 并根据这些曲目 ID 在作曲家表中查找作曲家。或者,我可以进一步修改“基本”查询,并与作曲家表再进行一次连接。然而; 这里是否有一个一般规则(关于性能)很容易指出其中一个查询是有利的?我已经进行了一些测试,但是我已经在如此小的范围内完成了它,以至于我真的看不出任何区别......
(3) SELECT composer.* FROM album
LEFT JOIN track ON track.album_id = album.id
LEFT JOIN composer ON composer.track_id = track.id
WHERE album.id IN (?,?,?,?,?)
...或者...
[get track ids from query (2)]
(4) SELECT composer.* FROM composer
WHERE composer.track_id IN (?,...);
作为记录:我已经在所有标准和连接列上建立了索引。