SQL优化之多表关联查询-案例一
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,慢SQL日志里看到一个三张表的关联查询,如下:SELECT COUNT(1) FROM refund_order_item i, artisan a, user u WHERE u.userid =
千家信息网最后更新 2026年11月03日SQL优化之多表关联查询-案例一
慢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)
查询
索引
时间
测试
关联
日志
联合
案例
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
新华互联网科技
科技平台互联网
金融科技创新监管互联网金融
麻工互联网科技
高科技与互联网
互联网科技论坛
互联网高科技股票
老年人脱离互联网科技的作文
互联网和高科技公司
温州喔噻互联网科技有限公司
福州新华互联网科技学校 知乎
重庆威客帮互联网科技
全球顶尖互联网科技公司
阿里互联网科技企业
黑云互联网科技有限公司
从那以后互联网科技有限公司
2021世界互联网领先科技成果发布
广州梦谷互联网科技有限公司领导
科技互联网专业工作会议发言稿
科技发展第三阶段互联网时代
关于新基建和互联网科技
智网互联网科技
善班互联网科技
紫鲸互联网科技
互联网科技咨询
广州慧亚互联网科技怎么样
互联网科技与管理
佛山市翊博互联网络科技有限公司
保险科技服务互联网营销体系
半导体是互联网高科技吗