SQL优化之多表关联查询-案例一
发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,慢SQL日志里看到一个三张表的关联查询,如下:SELECT COUNT(1) FROM refund_order_item i, artisan a, user u WHERE u.userid =
千家信息网最后更新 2025年11月08日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安全错误
数据库的锁怎样保障安全
普陀区实用软件开发收购价格
网络安全人人有责手抄报资料
visio网络安全设备
十堰进销存软件开发费用
春考网络技术可以去数媒专业吗
桓台在线考试软件开发价格
时间校准服务器ip
耐药基因数据库card
艾尔登法环连接服务器进不去
h3c路由器怎么设置网络安全
用r仿真数据库
打开开心快乐服务器的照片
南宁用的打车软件开发
协调服务器下载
steam市场游戏服务器
dns镜像服务器
贷款管理服务器哪个好
数据库怎么默认一个值
省文化集团数据库建设
数据库并发锁
网络安全情景剧主持词
软件开发app公司经营范围
电脑软件开发源代码
个人软件开发工作
阿里云数据库迁移要做什么
b/s架构软件开发
数据库名后缀
电脑版的服务器mc在哪儿玩
有关食品安全的数据库
成都棋类软件开发