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

  • 相关阅读:
    pyton 类(4) 静态方法
    python 类(3) property
    python 类(2)
    python 类(1)
    python 文件写入
    python 文件读取
    python 高阶函数 lamdad reduce map
    python 时间转换
    GDI+_从Bitmap里得到的Color数组值解决方案
    32位机,CPU是如何利用段寄存器寻址的
  • 原文地址:https://www.cnblogs.com/CatcherLJ/p/11636274.html
Copyright © 2011-2022 走看看