• 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

  • 相关阅读:
    最佳路径搜索算法1
    积分方程的程序化解决方案
    lcov
    nvidia driver
    dependency
    scp ssh-server
    boost 安装 latest
    ubuntu 快捷键
    nvidia drive
    查询优化器 postgres
  • 原文地址:https://www.cnblogs.com/CatcherLJ/p/11636274.html
Copyright © 2020-2023  润新知