文章详情

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

请输入下面的图形验证码

提交验证

短信预约提醒成功

SQL优化之多表关联查询-案例一

2024-04-02 19:55

关注

慢SQL日志里看到一个三张表的关联查询,如下:

SELECT COUNT(1) 
FROM refund_order_item i, artisan a, user u 
WHERE u.userid = i.user_id
	AND a.artisan_id = i.artisan_id;

测试查询时间:

mysql> SELECT COUNT(1) 
    -> FROM refund_order_item i, artisan a, user u 
    -> WHERE u.userid = i.user_id
    -> AND a.artisan_id = i.artisan_id;
+----------+
| COUNT(1) |
+----------+
|   260605 |
+----------+
1 row in set (2.30 sec)

查看执行计划:

mysql> explain SELECT COUNT(1) 
    -> FROM refund_order_item i, artisan a, user u 
    -> WHERE u.userid = i.user_id
    -> AND a.artisan_id = i.artisan_id;
+----+-------------+-------+------------+--------+----------------------------+---------+---------+------------------+--------+----------+-------------+
| id | select_type       | table   | partitions   | type      | possible_keys        | key        | key_len | ref              | rows            | filtered | Extra       |
+----+-------------+-------+------------+--------+----------------------------+---------+---------+------------------+--------+----------+-------------+
|  1 | SIMPLE      | i      | NULL       | ALL     | idx_user_id,idx_artisan_id       | NULL    | NULL    | NULL             | 255599 |   100.00 | NULL        |
|  1 | SIMPLE      | a     | NULL       | eq_ref | PRIMARY                               | PRIMARY | 122   | hlj.i.artisan_id |      1     |   100.00 | Using index |
|  1 | SIMPLE      | u     | NULL       | eq_ref | userid                                    | userid    | 122      | hlj.i.user_id    |      1     |   100.00 | Using index |
+----+-------------+-------+------------+--------+----------------------------+---------+---------+------------------+--------+----------+-------------+

可以看到refund_order_item表没有走索引。

创建联合索引:

ALTER TABLE refund_order_item ADD INDEX idx_aid_uid (artisan_id, user_id);

查看执行计划:

explain SELECT COUNT(1)  FROM refund_order_item i, artisan a, user u  WHERE u.userid = i.user_id AND a.artisan_id = i.artisan_id;
+----+-------------+-------+------------+--------+----------------------------------------+-------------+---------+------------------+--------+----------+-------------+
| id | select_type | table | partitions | type   | possible_keys                                  | key         | key_len | ref              | rows   | filtered | Extra       |
+----+-------------+-------+------------+--------+----------------------------------------+-------------+---------+------------------+--------+----------+-------------+
|  1 | SIMPLE      | i      | NULL       | index  | idx_user_id,idx_artisan_id,idx_aid_uid | idx_aid_uid | 244     | NULL             | 255599 |   100.00 | Using index |
|  1 | SIMPLE      | a     | NULL       | eq_ref | PRIMARY                                           | PRIMARY     | 122     | hlj.i.artisan_id |      1 |   100.00 | Using index |
|  1 | SIMPLE      | u     | NULL       | eq_ref | userid                                                 | userid      | 122        | hlj.i.user_id    |      1 |   100.00 | Using index |
+----+-------------+-------+------------+--------+----------------------------------------+-------------+---------+------------------+--------+----------+-------------+

可以看到执行计划已经走索引。

测试查询时间:

mysql> SELECT COUNT(1) 
    -> FROM refund_order_item i, artisan a, user u 
    -> WHERE u.userid = i.user_id
    -> AND a.artisan_id = i.artisan_id;
+----------+
| COUNT(1) |
+----------+
|   260605 |
+----------+
1 row in set (1.15 sec)
阅读原文内容投诉

免责声明:

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

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

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯