千家信息网

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

发表于:2024-10-09 作者:千家信息网编辑
千家信息网最后更新 2024年10月09日,不知道大家之前对类似通过IN换INNER JOIN实现对mysql的优化的文章有无了解,今天我在这里给大家再简单的讲讲。感兴趣的话就一起来看看正文部分吧,相信看完通过IN换INNER JOIN实现对m
千家信息网最后更新 2024年10月09日通过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       |           | 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      |           | 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 |           | ALL    | NULL          | NULL    | NULL    | NULL  | NULL | Using temporary          |+----+--------------+---------------------+--------+---------------+---------+---------+-------+------+--------------------------+5 rows in set (0.00 sec)

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

0