mysql复杂统计查询(SQL查询优化MySQLin和exists的区别总结)

in和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);

mysql复杂统计查询(SQL查询优化MySQLin和exists的区别总结)(1)

mysql复杂统计查询(SQL查询优化MySQLin和exists的区别总结)(2)

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页