频道栏目
首页 > 资讯 > MySQL > 正文

MySQL数据库小表驱动大表的优化教程

18-07-17        来源:[db:作者]  
收藏   我要投稿

优化原则:小表驱动大表,即小的数据集驱动大的数据集。

先来了解两个关键字: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。

相关TAG标签
上一篇:SQLServer的job执行powershell或cmdexe碰到权限问题的解决方案
下一篇:ssm框架实训解析
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站