Case:update中把in改写成join性能提高数倍
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,(1)优化前如下一条SQL,把从1985-05-21入职前的员工薪资都增加500,执行约20.70 s,从执行计划中可以看出对表salaries进行的是索引全扫描,扫描行数约260W行。mysql>
千家信息网最后更新 2026年11月02日Case:update中把in改写成join性能提高数倍
(1)优化前
如下一条SQL,把从1985-05-21入职前的员工薪资都增加500,执行约20.70 s,
从执行计划中可以看出对表salaries进行的是索引全扫描,扫描行数约260W行。
mysql> update salaries set salary=salary+500 where emp_no in (select emp_no from employees where hire_date<='1985-05-21');Query OK, 151583 rows affected (20.70 sec)Rows matched: 151583 Changed: 151583 Warnings: 0mysql> desc update salaries set salary=salary+500 where emp_no in (select emp_no from employees where hire_date<='1985-05-21');+----+--------------------+-----------+------------+-----------------+---------------+---------+---------+------+---------+----------+-------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+--------------------+-----------+------------+-----------------+---------------+---------+---------+------+---------+----------+-------------+| 1 | UPDATE | salaries | NULL | index | NULL | PRIMARY | 7 | NULL | 2674458 | 100.00 | Using where || 2 | DEPENDENT SUBQUERY | employees | NULL | unique_subquery | PRIMARY | PRIMARY | 4 | func | 1 | 33.33 | Using where |+----+--------------------+-----------+------------+-----------------+---------------+---------+---------+------+---------+----------+-------------+2 rows in set, 1 warning (0.00 sec)
(2)优化后
把in改写成join后,虽然对employees是全表扫描,但是扫描行数近29W行,大大减少,所以SQL执行时间可以缩减到7.26s.
mysql> update salaries s join (select distinct e.emp_no from employees e where e.hire_date<='1985-05-21') e on s.emp_no=e.emp_no -> set s.salary=salary+500;Query OK, 151583 rows affected (7.26 sec)Rows matched: 151583 Changed: 151583 Warnings: 0mysql> desc update salaries s join (select distinct e.emp_no from employees e where e.hire_date<='1985-05-21') e on s.emp_no=e.emp_no -> set s.salary=salary+500;+----+-------------+------------+------------+------+----------------+---------+---------+----------+--------+----------+-------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+-------------+------------+------------+------+----------------+---------+---------+----------+--------+----------+-------------+| 1 | PRIMARY || NULL | ALL | NULL | NULL | NULL | NULL | 99827 | 100.00 | NULL || 1 | UPDATE | s | NULL | ref | PRIMARY,emp_no | PRIMARY | 4 | e.emp_no | 10 | 100.00 | NULL || 2 | DERIVED | e | NULL | ALL | PRIMARY | NULL | NULL | NULL | 299512 | 33.33 | Using where |+----+-------------+------------+------------+------+----------------+---------+---------+----------+--------+----------+-------------+3 rows in set, 1 warning (0.00 sec)
员工
时间
索引
薪资
行约
性能
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
科技互联网公司装修
互联网金融 科技
互联网科技的发展
狮子座互联网科技
互联网 的科技创新
赫美联合互联网科技
上海卓越科技 互联网
左右互联网络科技
山东吉时兔互联网科技有限公司
互联网科技寓意
湖北码尼互联网科技有限公司电话
昊天互联网科技有限公司
科技类公司包括互联网吗
深圳市罗太互联网科技有限公司
区块链结合互联网科技
华中科技大学互联网的牛人
互联网科技平台产品运营
保山互联网科技靠谱吗
科技互联网专业工作会议发言稿
北京瑞云互联网科技有限公司
智慧科技互联网
居家互联网科技有限公司
现代互联网科技股
全球顶尖互联网科技公司
2021互联网科技公司排名
半导体行业属于互联网高科技类吗
唯美互联网科技
中国科技和美国互联网
保山互联网科技靠谱吗
重庆科技产业互联网有哪些