整个 Not in 字句返回空值,结果就是查询不会返回任何结果。
而 in 相当于 =any 的意思,可以有效处理子查询中返回空值的情况,返回正确的结果。
那你就吧not in改成not exists试试看,因为in是先执行子查询中的查询,然后再执行主查询,exists查询它是先执行主查询,即外层表的查询,然后再执行子查询,那么exists的效率应该高一些in和exists不论是大数据表还是小数据表,有可利用的索引还是无可利用的索引的情况下,它们的运行效率是差不多的,exists也许会稍微高一点点,但是差别很小。not exists在有可被利用索引的情况下效率很高,但是在大数据表的情况下如果没有可被利用索引的情况下其运行效率很差。
not in 则在大数据表的情况下,不论有无可被利用的索引,其运行效率均极低,比无索引可用的not exists还要慢很多。
in和exists常用于求交集,它们的运行效率分别不大,可根据个人喜好选用。not in和not exists常用于求非交集,小数据表时可随便用,但是碰到大数据表时就要小心了。not in不论有无可被利用的索引都会出现效率上的悲剧,应避免使用。not exists在有索引可用的情况下表现优异可作为获取非交集的首选,然而在无索引可用时却很慢,此时也应避免使用。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)