我的编程空间,编程开发者的网络收藏夹
学习永远不晚

通过IN换INNER JOIN实现对mysql的优化

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

通过IN换INNER JOIN实现对mysql的优化

不知道大家之前对类似通过IN换INNER JOIN实现对mysql的优化的文章有无了解,今天我在这里给大家再简单的讲讲。感兴趣的话就一起来看看正文部分吧,相信看完通过IN换INNER JOIN实现对mysql的优化你一定会有所收获的。

SQL问题:

要将A表查询的ID,匹配B表的ID,并将B表全部内容查询出来:

未优化前:

MySQL [xxuer]> SELECT 
    ->     COUNT(*)
    -> FROM
    ->     t_cmdb_app_version
    -> WHERE
    ->     id IN (SELECT 
    ->             pid
    ->         FROM
    ->             t_cmdb_app_relation UNION SELECT 
    ->             rp_id
    ->         FROM
    ->             t_cmdb_app_relation);
+----------+
| COUNT(*) |
+----------+
|      266 |
+----------+
1 row in set (0.21 sec)


优化后:

MySQL [xxuer]> SELECT 
    ->     count(*)
    -> FROM
    ->     t_cmdb_app_version a
    ->         INNER JOIN
    ->     (SELECT 
    ->         pid
    ->     FROM
    ->         t_cmdb_app_relation UNION SELECT 
    ->         rp_id
    ->     FROM
    ->         t_cmdb_app_relation) b ON a.id = b.pid;
+----------+
| count(*) |
+----------+
|      266 |
+----------+
1 row in set (0.00 sec)


查看执行计划对比:

MySQL [xxuer]> explain SELECT 
    ->     COUNT(*)
    -> FROM
    ->     t_cmdb_app_version
    -> WHERE
    ->     id IN (SELECT 
    ->             pid
    ->         FROM
    ->             t_cmdb_app_relation UNION SELECT 
    ->             rp_id
    ->         FROM
    ->             t_cmdb_app_relation);
+----+--------------------+---------------------+-------+---------------+---------+---------+------+------+--------------------------+
| id | select_type        | table               | type  | possible_keys | key     | key_len | ref  | rows | Extra                    |
+----+--------------------+---------------------+-------+---------------+---------+---------+------+------+--------------------------+
|  1 | PRIMARY            | t_cmdb_app_version  | index | NULL          | PRIMARY | 4       | NULL |  659 | Using where; Using index |
|  2 | DEPENDENT SUBQUERY | t_cmdb_app_relation | ALL   | NULL          | NULL    | NULL    | NULL |  383 | Using where              |
|  3 | DEPENDENT UNION    | t_cmdb_app_relation | ALL   | NULL          | NULL    | NULL    | NULL |  383 | Using where              |
| NULL | UNION RESULT       | <union2,3>          | ALL   | NULL          | NULL    | NULL    | NULL | NULL | Using temporary          |
+----+--------------------+---------------------+-------+---------------+---------+---------+------+------+--------------------------+
4 rows in set (0.00 sec)
MySQL [xxuer]> explain SELECT 
    ->     count(*)
    -> FROM
    ->     t_cmdb_app_version a
    ->         INNER JOIN
    ->     (SELECT 
    ->         pid
    ->     FROM
    ->         t_cmdb_app_relation UNION SELECT 
    ->         rp_id
    ->     FROM
    ->         t_cmdb_app_relation) b ON a.id = b.pid;
+----+--------------+---------------------+--------+---------------+---------+---------+-------+------+--------------------------+
| id | select_type  | table               | type   | possible_keys | key     | key_len | ref   | rows | Extra                    |
+----+--------------+---------------------+--------+---------------+---------+---------+-------+------+--------------------------+
|  1 | PRIMARY      | <derived2>          | ALL    | NULL          | NULL    | NULL    | NULL  |  766 | Using where              |
|  1 | PRIMARY      | a                   | eq_ref | PRIMARY       | PRIMARY | 4       | b.pid |    1 | Using where; Using index |
|  2 | DERIVED      | t_cmdb_app_relation | ALL    | NULL          | NULL    | NULL    | NULL  |  383 | NULL                     |
|  3 | UNION        | t_cmdb_app_relation | ALL    | NULL          | NULL    | NULL    | NULL  |  383 | NULL                     |
| NULL | UNION RESULT | <union2,3>          | ALL    | NULL          | NULL    | NULL    | NULL  | NULL | Using temporary          |
+----+--------------+---------------------+--------+---------------+---------+---------+-------+------+--------------------------+
5 rows in set (0.00 sec)

看完通过IN换INNER JOIN实现对mysql的优化这篇文章,大家觉得怎么样?如果想要了解更多相关,可以继续关注我们的行业资讯板块。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

通过IN换INNER JOIN实现对mysql的优化

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

MySQL之select in 子查询优化的实现

下面的演示基于MySQL5.7.27版本 一、关于MySQL子查询的优化策略介绍:子查询优化策略 对于不同类型的子查询,优化器会选择不同的策略。1. 对于 IN、=ANY 子查询,优化器有如下策略选择:semijoinMaterializa
2022-05-13

MySql子查询IN的执行和优化的实现方法

这篇文章主要讲解了“MySql子查询IN的执行和优化的实现方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySql子查询IN的执行和优化的实现方法”吧!目录IN为什么慢?IN和EXIST
2023-06-20

通过Go语言实现的压测工具优化性能

通过Go语言实现的压测工具优化性能随着互联网应用的不断发展,对于Web服务的高并发处理能力要求也越来越高。压测是一种测试系统在各种条件下的性能的方法,可以模拟多个用户同时访问系统,从而测试系统在高并发情况下的性能表现。在这篇文章中,我们将
通过Go语言实现的压测工具优化性能
2024-03-10

Android 通过ViewHolder优化适配器的实现方法(必看)

Adapter类的定义: Adapter对象是AdapterView和底层数据见的桥梁。Adapter用于访问数据项,并且负责为数据项生成视图 AdapterView是一个抽象类,用于那些需要通过Adapter填充自身的视图,其常见子类是L
2022-06-06

MySQL通过DQL实现对数据库数据的基本查询

本篇文章详细讲解了MySQL使用DQL查询数据库数据的基本方法。它涵盖了SELECT语句、WHERE子句、ORDERBY子句、LIMIT子句、DISTINCT关键字、HAVING子句、子查询和连接等概念。文中提供了示例代码,帮助读者理解这些概念并编写有效的查询语句。本文旨在帮助读者熟练使用DQL来检索、过滤和排序数据库中的数据。
MySQL通过DQL实现对数据库数据的基本查询
2024-04-02

通过golang实现Select Channels Go并发式编程的性能优化

在Go语言中,select语句用于同时监听多个channel的数据流动,从而实现并发式编程。通过合理地使用select语句,可以提高程序的性能。以下是一些优化技巧:1. 减少select中case的数量:select语句在每个case之间进
2023-10-20

MySQL通过DQL实现对数据库数据的条件查询

通过使用DQL,MySQL可进行条件查询,筛选满足特定条件的数据。条件查询使用WHERE子句,包含使用比较运算符、逻辑运算符和函数的表达式。通过优化措施,如使用索引和限制返回列数,可以提高条件查询性能。其他技巧包括使用LIMIT和ORDERBY来控制返回的行数和顺序,以及使用GROUPBY和HAVING对结果进行分组和筛选。
MySQL通过DQL实现对数据库数据的条件查询
2024-04-02

C#通过同步和异步如何实现优化做早餐的时间

本篇内容介绍了“C#通过同步和异步如何实现优化做早餐的时间”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!概述一天之计在于晨,每天的早餐也是必
2023-06-21

如何通过php函数优化网页转码和字符编码的实现?

在开发网页应用程序时,经常会遇到需要对网页进行转码和字符编码的情况。正确的转码和字符编码可以确保网页在不同的浏览器和操作系统下都能正常显示,避免乱码等问题。本文将介绍如何使用PHP函数来优化网页转码和字符编码的实现,并提供具体的代码示例。设
2023-10-21

如何实现MySQL底层优化:存储引擎的选择与性能对比

MySQL 是一种强大的开源关系型数据库,可用于各种规模的应用程序。MySQL 支持多种不同的存储引擎,如 MyISAM、InnoDB、Memory、CSV 等,不同的引擎具有不同的功能和性能特点。在进行 MySQL 底层优化时,存储引擎的
如何实现MySQL底层优化:存储引擎的选择与性能对比
2023-11-09

通过MySQL开发实现数据可视化与报表分析的项目经验分享

在当今数据大爆炸的时代,数据分析和数据可视化成为了企业决策的重要工具。作为一名开发人员,在MySQL数据库上开发实现数据可视化与报表分析的项目经验,我想和大家分享一下。首先,我想提到的是选择MySQL作为数据库的原因。MySQL是一款开源的
通过MySQL开发实现数据可视化与报表分析的项目经验分享
2023-11-04

Python中如何对MySQL数据库进行备份和恢复操作?(通过Python如何实现MySQL数据库的备份与恢复?)

本文介绍了如何使用PythonMySQLdb库对MySQL数据库进行备份和恢复。备份涉及导出数据库到文件,而恢复涉及从文件导入数据库。自动化过程可以使用调度器(如cron)来安排定期备份和恢复。本文提供了详细的步骤和代码示例,使读者能够轻松地实施这些操作,确保数据的安全性和完整性。
Python中如何对MySQL数据库进行备份和恢复操作?(通过Python如何实现MySQL数据库的备份与恢复?)
2024-04-02

编程热搜

目录