mysql复杂统计查询(SQL查询优化MySQLin和exists的区别总结)
1、从语义上来说:in是去匹配in后的结果集;exists是条件上的二次匹配,匹配和结果集内相同的数据。
2、实现的效果差异不大,内部的实现差异挺大。in是有数量上限的,exists没有。
in,是由in后面的数据先运行==>得出结果集后再去匹配;
exists,则相反,是先运行外面的结果,再去和exists内的数据做匹配;
执行顺序和效率:1、in先执行子查询,将子查询的结果存放在缓存中,在执行外层的查询,适合用在子查询结果集较小的情况。
2、exists先执行外查询,将外查询的每一条结果放到内查询中比对,如果存在,就保留外查询的结果,否则删除,适合用在外表结果集小于内表的情况。
总结:in内部的数据要少一些,exists要外部数据少一些,更能提升效率。
注意:exists用于检查子查询是否至少会返回一行数据,该子查询实际上并不返回任何数据,而是返回值true或false。
select * from health_sys_user WHERE user_id in (SELECT user_id FROM health_sys_user WHERE user_id = 1 OR user_id = 26);
select * from health_sys_user WHERE exists (SELECT * FROM health_sys_role where role_id=26);
,
免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com