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

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

解决方法:

因为你只关心作曲家,所以没有理由在查询3中使用LEFT JOIN(很高兴为你编号). (通常外连接速度较慢.)

您不需要在查询3中加入相册表 – 只需在track.album_id上使用IN即可. (我假设你并不担心丢失专辑的流氓曲目.)

你提到你有各种各样的索引.但请记住,MySQL每个查询只能为每个表使用一个索引.因此,如果要检查多项内容,则必须创建复合索引.

令人惊讶的是,连接通常比大型IN语句更快,这是因为IN中的值没有被索引,因此MySQL无法对它们进行索引连接.但这只适用于很多值 – 对于少数使用IN的人来说可能更快.

就个人而言,我会使用JOIN方法,直到您看到此查询成为问题为止. (只有在你需要检查一些非常复杂的条件时才会发生这种情况,这可能会慢一些).连接是更简单的代码,并且最有可能超快 – 所以不要在没有特定原因的情况下使事情变得更复杂.

标签:performance,mysql

来源: https://codeday.me/bug/20190901/1786198.html

mysql的join+in,MySQL和性能:使用’IN’或’JOIN’?相关推荐

  1. [转]Mysql Join语法解析与性能分析

    转自:http://www.cnblogs.com/BeginMan/p/3754322.html 一.Join语法概述 join 用于多表中字段之间的联系,语法如下: ... FROM table1 ...

  2. mysql join性能_Mysql Join语法解析与性能分析

    一.Join语法概述 join 用于多表中字段之间的联系,语法如下: ... FROM table1 INNER|LEFT|RIGHT JOIN table2 ON conditiona table1 ...

  3. mysql join 性能测试_Mysql Join语法解析与性能分析

    一.Join语法概述 join 用于多表中字段之间的联系,语法如下: SELECT * FROM table1 INNER|LEFT|RIGHT JOIN table2 ON conditiona t ...

  4. left join 一对多_MYSQL 连接查询算法:JOIN语句在 MYSQL 内部到底是怎么执行的

    前言 我们从一个问题引入今天的主题. 在日常业务开发中,我们可能经常听到 DBA 对我们说"不要"(注意:不是禁止)使用 join,那么为什么 DBA 对 join 这么抵触呢?是 ...

  5. mysql分页limit运算,MySQL的limit分页查询及性能问题

    MySQL 通过 limit 实现分页查询.limit 接收一个或两个整数型参数.如果是两个参数,第一个指定返回记录行的偏移量,第二个指定返回记录行的最大数目.初始记录行的偏移量是 0.为了与 Pos ...

  6. MySQL(二):MySQL性能优化

    [目录] MySQL(一):MySQL中的事务 MySQL(二):MySQL性能优化 [前言] 在对MySQL的事务进行了学习总结之后,继续对MySQL的性能优化进行学习并进行总结,将自己在工作中的性 ...

  7. MySQL数据库---SQL语句优化及性能优化

    文章目录 mysql的架构图 mysql的执行过程 sql语句执行计划 索引失效的情况 mysql性能调优: 分库分表 读写分离---主从复制 mysql的架构图 大致分为4层:连接层.服务层.引擎层 ...

  8. MySQL 用 limit 为什么会影响性能?

    欢迎关注方志朋的博客,回复"666"获面试宝典 一,前言 首先说明一下MySQL的版本: mysql> select version(); +-----------+ | v ...

  9. 项目性能优化(MySQL读写分离、MySQL主从同步、Django实现MySQL读写分离)

    当项目中数据库表越来越多,数据量也逐渐增多时,需要做数据库的安全和性能的优化.对于数据库的优化,可以选择使用MySQL读写分离实现. 1.MySQL主从同步 1.主从同步机制 1.1.主从同步介绍和优 ...

最新文章

  1. Android studio 下 JNI 开发实例
  2. redis 面试问题问答Top 10
  3. 【文本信息抽取与结构化】目前NLP领域最有应用价值的子任务之一
  4. Github标星8.3k+,Tensorflow 2.0的代码实现及教学材料(“龙书”)公布下载了!
  5. 女生职场必读:步入30岁后的30句经典感言
  6. 大学计算机一级计算机应用试题及答案,大学生计算机应用基础试题及答案
  7. 在JDK 9(以及8)以及更高版本中,所有内容都可以作为一个流
  8. 如何在计算机课上渗透德育教育初探,在《道德与法治》课中德育渗透的案例初探...
  9. .NET Framework基础知识(二)(转载)
  10. python filter过滤器的使用_Python filter过滤器原理及实例应用
  11. 一个判断session是否过期的小技巧_Java
  12. python 菜鸟-Python3 列表
  13. 牛批!妹子一口气拿下BAT、美团、vivo、爱奇艺等公司Offer面经总结
  14. Visual Studio2010安装步骤
  15. 组网[ZeroTier]+自建Moon服务
  16. 图扑软件基于钻孔数据的三维地质模型可视化
  17. java mp3转midi_javax_sound_midi-_player 将mid音频文件用java来实现它的播放和使用 - 下载 - 搜珍网...
  18. 关于固态硬盘SSD的4K对齐
  19. SpringCloud_Dubbo_JZZ_MBY
  20. Photoshop中的填充功能

热门文章

  1. Android 高德地图的定位,周边搜索
  2. Anyproxy的安装和使用
  3. 苏州大学计算机课程与资源,苏州大学计算机学院2018-2019学年第一学期研究生课课程表...
  4. stm32L151A超低功耗单片机实现电子秤代码
  5. 安全好用的电脑便签软件下载推荐
  6. 服务器修改远程链接端口号,怎么修改服务器的远程连接端口号
  7. stm32f4 adc 使用
  8. 客快物流大数据项目(九十八):ClickHouse的SQL函数
  9. 乔姆斯基文法分类【0型1型2型3型文法】
  10. 小羊驼和你一起学习cocos2d-x之三(进度条、CCProgressTimer)