MySQL数据库小表驱动大表的优化教程
程序员文章站
2022-03-26 19:27:40
优化原则:小表驱动大表,即小的数据集驱动大的数据集。
先来了解两个关键字:in和exists。建立两个表,员工表和部门表。分别用两个关键字来查询,一般员工表为大数据集,部门表为小数据集。
in:...
优化原则:小表驱动大表,即小的数据集驱动大的数据集。
先来了解两个关键字:in和exists。建立两个表,员工表和部门表。分别用两个关键字来查询,一般员工表为大数据集,部门表为小数据集。
in:
select * from t_emp where dept_id in (select dept_id from t_dept) limit 5;
相当于:
for select dept_id from t_dept for select * from t_emp where t_emp.dept_id = t_dept.dept_id
先子查询,后主查询,即先查询部门,然后查询部门下的员工,即小表驱动大表。
exists:
select * from t_emp where exists (select 1 from t_dept where t_dept.dept_id = t_emp.dept_id);
相当于:
for select * from t_emp for select * from t_dept where t_dept.dept_id = t_emp.dept_id
先查员工表,再根据部门id查部门中是否存在,返回true or false,再决定员工表数据是去是留。大表驱动小表,查询效率较低。
扩展:
两个关键字可以反过来用,t_emp大于t_dept时,用in;小于时用exists。
上一篇: 分享一个重庆普金金融的SQL面试题
下一篇: SpringBoot整合JDBC