zoukankan      html  css  js  c++  java
  • MySQL中EXISTS和IN的比较

    EXISTS用于检查子查询是否至少会返回一行数据,该子查询实际上并不返回任何数据,而是返回值True或False
    EXISTS 指定一个子查询,检测 行 的存在。


    select * from TableIn where exists(select BID from TableEx where BNAME=TableIn.ANAME)
    select * from TableIn where ANAME in(select BNAME from TableEx)

    这两个查询返回相同结果,也就是TableIn表的name 需要在 TableEx表的name存在。如果exists子查询是有结果集,就返回true,否则返回false;
    exists的运行方式:先运行主查询一次 再去子查询里查询是否有对应记录,如果有,返回ture,反之返回false,再根据主查询中的每一行去子查询里去查询.

    IN的运行方式:in的子查询要返回结果集。子查询先产生结果集,然后主查询再去结果集里去找符合要求的字段列表去.

    EXISTS与IN的使用效率比较,通常情况下采用exists要比in效率高,因为IN不走索引,但要看实际情况具体使用:IN适合于外表大而内表小的情况;EXISTS适合于外表小而内表大的情况。

    NOT IN 和 NOT EXISTS的道理是一样的,NOT EXISTS的效率依然高于NOT IN

    文章借鉴于:https://www.cnblogs.com/qlqwjy/p/8598091.html

  • 相关阅读:
    (一)js概述
    (八)js函数二
    (七)js函数一
    (十)js获取日期
    Java 定时器 Timer 的使用.
    多线程编程学习四(Lock 的使用)
    多线程编程学习三(线程间通信).
    wait/notify 实现多线程交叉备份
    多线程编程学习二(对象及变量的并发访问).
    浅析多线程的对象锁和Class锁
  • 原文地址:https://www.cnblogs.com/CatcherLJ/p/11636274.html
Copyright © 2011-2022 走看看