当前位置:Gxlcms > 数据库问题 > 面试被问之-----sql优化中in与exists的区别

面试被问之-----sql优化中in与exists的区别

时间:2021-07-01 10:21:17 帮助过:38人阅读

转: Sql语句中IN和exists的区别及应用

总结起来大概是这样的:

in是先进行子查询,然后将内表(子查询)与外表(主查询)进行hash关联(笛卡尔积),然后进行条件比较,即筛选in前后字段相等的数据保留,不相等的删除.

exists是先进行外层表loop循环,然后将每一条数据当做条件进行子查询,如果子查询返回true则保存该数据,否则删除.

可以理解为用in时先子表全表查询,然后将每一条数据作为条件以及索引拿去进行主表查询,所以如果主表大于子表,那么用in就会效率高,

而用exists会先进行主表全表查询,然后将每一条数据作为条件以及索引拿去进行子表查询,,所以如果主表小于子表,那么用exists会效率高.

因为索引在数据多的时候才真正派上用场了.

 

not in主表和子表都不会用到索引且子表有null值时,查询结果有问题,

而not exists子表始终会用到索引,而且不会存在子表有null值时的问题

转: [笔记] SQL性能优化 - 避免使用 IN 和 NOT IN

所以,用not exists替代not in

 

面试被问之-----sql优化中in与exists的区别

标签:www.   面试   相等   返回   mysql   优化   查询   als   相关   

人气教程排行