我有一些代码,它们通过ID查找数据库中的几张CD.这是使用’IN’条件完成的:
(1) SELECT * FROM album WHERE id IN (?,?,?,?,?)
下一步是获取与这些相册相关的曲目.我这样做是通过稍微修改’base’查询.
(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 (?,...);
为了记录:我已经在所有条件和连接列上都有索引.