`
bugyun
  • 浏览: 557026 次
社区版块
存档分类
最新评论

mysql 中 exists 与 in 的底层分析

 
阅读更多

 

in 虽然和 or 有一定的区别,但单从整体逻辑和执行计划来看,相差无几,所以关于 in 的使用,宏观是可以看成(...or ...or......)

 

in : 把外表和内表作hash 连接
exists : 对外表作loop循环,每次loop循环再对内表进行查询 

1. 如果查询的两个表大小相当,那么用in和exists差别不大;
2. 如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in:

参考文献:

http://blog.sina.com.cn/s/blog_3edc5e2e0102uzjn.html

http://blog.itpub.net/28912557/viewspace-1255568/

 

分享到:
评论

相关推荐

    mysql性能优化综述

    - 使用`EXISTS`代替相关子查询中的`IN`操作。 - 在不关心重复数据的情况下,使用`UNION ALL`代替`UNION`。 - 避免在`ORDER BY`子句中使用复杂的表达式。 - 减少数据库访问次数,通过一次查询获取尽可能多的信息...

    MySQL存储过程入门学习

    ### MySQL存储过程入门学习 #### 一、存储过程概述 **存储过程**(Stored Procedure)是一种在数据库中存储的预先编写并编译好的SQL程序或函数集合。存储过程的主要优势在于可以提高应用程序的性能和响应速度,同时...

    mysql存储过程与视图(存储过程语法介绍、MySQL视图用法、注意事项)..docx

    ### MySQL存储过程与视图详解 #### 一、MySQL存储过程 ##### 1、概念简介 存储过程是一种在数据库服务器中存储预编译SQL代码块的方式。这些代码块可以包括复杂的逻辑,允许用户通过简单的调用来执行一系列操作。...

    【数据面试系列】MySQL高频面试题及知识要点.pdf

    在MySQL中,`REGEXP`用于模式匹配,类似于SQL中的`LIKE`关键字。`REGEXP`支持正则表达式,提供了更强大的模式匹配能力。例如: ```sql SELECT * FROM table_name WHERE column_name REGEXP 'pattern'; ``` **4. ...

    mysql重要的几个概念与应用

    ### MySQL重要的几个概念与应用详解 #### 一、视图 **定义与作用:** 视图可以被看作是“虚拟表”,它并不是一个实际存在的物理表,而是由一个SQL查询语句产生的结果集。视图的主要作用在于简化复杂的查询语句、...

    SQL学习资料(包含所有常用的语句例子).zip

    - 使用IN、NOT IN、EXISTS、NOT EXISTS进行子查询比较。 9. 视图(View): - 定义虚拟表,基于一个或多个表的结果集。 - 提供安全层,隐藏底层表的真实结构和数据。 10. 存储过程(Stored Procedure)与函数:...

    创建存储过程.rar

    在主流的数据库系统中,如MySQL、SQL Server和Oracle,创建存储过程的语法有所不同,但基本结构类似: 1. MySQL: ```sql CREATE PROCEDURE proc_name([IN|OUT|INOUT] param1 datatype, ...) BEGIN -- SQL语句 END;...

    行业-105 透彻研究通过explain命令得到的SQL执行计划(6).rar

    在MySQL、PostgreSQL、Oracle等主流数据库系统中,`EXPLAIN`通常用于在执行查询前查看数据库如何执行这个查询。它会显示查询的逻辑执行顺序,包括表的扫描方式、连接顺序、索引使用情况以及预计的行数等信息。这些...

    PHP采用excel把数据导入数据库.pdf

    CREATE TABLE IF NOT EXISTS `test` ( `id` int(10) NOT NULL AUTO_INCREMENT, `name` varchar(20) NOT NULL, `pw` varchar(20) NOT NULL, -- 这里未在描述中提及,但通常导入时可能还有其他字段 PRIMARY KEY ...

    Oracle面试题.pdf

    - **避免使用not in, not exists, like '%'等可能导致全表扫描的关键字**。 - **优先考虑关联查询,其次考虑集合查询,最后考虑子查询**。 - **WHERE条件中的强限制性条件应放在最后**,从右向左解析。 - **在多...

    Hive教程.pdf

    - 配置Hive与MySQL之间的连接。 - **启动Hadoop**: - 配置Hadoop环境变量。 - 启动Hadoop服务。 - **启动Hive**: - 启动Hive服务。 - **测试hive**: - 使用Hive CLI执行简单查询以验证安装成功。

    Python操作数据库(课件)

    SQL允许用户创建、查询、更新和删除数据库中的数据,而无需了解底层存储机制。SQL语法简洁,可读性强,而且能在不同数据库系统间通用。在Python中,我们可以使用sqlite3库来执行SQL语句,比如创建表: ```sql ...

    python-dbutils 简单封装

    sql = "CREATE TABLE IF NOT EXISTS users (id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50), password VARCHAR(50))" db = DBUtil() db.execute_sql(sql) db.close_conn() ``` 最后,`README.text`...

    SQL21自学通

    ### SQL21自学通知识点梳理 #### 一、SQL简介及历史 - **SQL简史:** - SQL(Structured Query Language,结构化...通过学习这些内容,读者可以全面掌握SQL的基础知识,并能够应用于实际的数据管理和分析工作中。

    常用SQL 语句大全

    10. **删除主表中已在副表中不存在的信息**: 使用`INNER JOIN`删除,例如 `DELETE FROM MainTable WHERE NOT EXISTS (SELECT 1 FROM SecondTable WHERE MainTable.ID = SecondTable.ID);` 11. **四表联查问题**: ...

    Python requests 爬虫

    虽然Scrapy不直接依赖`requests`库,但其底层实现了类似功能,提供了更强大的爬虫能力。 **总结** Python的`requests`库是网络爬虫的基础,通过它可以轻松地进行HTTP请求并获取响应。同时,合理地存储爬取到的数据...

Global site tag (gtag.js) - Google Analytics