mysql join性能_MySQL和性能:使用’IN’或’JOIN’?

我有一些代码,它们通过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 (?,...);

为了记录:我已经在所有条件和连接列上都有索引.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值