`

exists,in的区别-mysql

阅读更多
[/b][b]如说两张表一张是用户表TDefUser(userid,address,phone),一张是消费表TAccConsume(userid,time,amount),我要查消费超过5000的用户记录,那么我可以写
select   *   from   TDefUser where   exists   (select   1   from   TAccConsume   where   TDefUser.userid=TAccConsume.userid   and   TAccConsume.amount> 5000)

也可以写
select   *   from   TDefUser where   userid   in   (select   userid   from   TAccConsume   where   TAccConsume.amount> 5000) 


select   1   代表什么意思呢?
==============
师傅说因为exists只返回真或假,select   1   可以提高效率。

exists()后面的子查询被称做相关子查询   他是不返回列表的值的.只是返回一个ture或false的结果(这也是为什么子查询里是 "select   1 "的原因   当然也可以select任何东西)
其运行方式是先运行主查询一次   再去子查询里查询与其对应的结果   如果是ture则输出,反之则不输出.再根据主查询中的每一行去子查询里去查询.

in()后面的子查询   是返回结果集的,换句话说执行次序和exists()不一样.子查询先产生结果集,然后主查询再去结果集里去找符合要求的字段列表去.符合要求的输出,反之则不输出.

可是我不太知道exists的执行过程是怎么样的
------------------------------------------
执行顺序如下:
1.首先执行一次外部查询
2.对于外部查询中的每一行分别执行一次子查询,而且每次执行子查询时都会引用外部查询中当前行的值。
3.使用子查询的结果来确定外部查询的结果集。
如果外部查询返回100行,SQL   就将执行101次查询,一次执行外部查询,然后为外部查询返回的每一行执行一次子查询。但实际上,SQL的查询
优化器有可能会找到一种更好的方法来执行相关子查询,而不需要实际执行101次查询。

有人说:能用左连接做掉的事情,尽量不要去用exists,in之类的

又有人说:exists的性能比外连接更好,曾用过做数十万数据量的查询,exists大概比外连接快30%左右

还有人说:如果子查询得出的结果集记录较少,主查询中的表较大且又有索引时应该用in;反之如果外层的主查询记录较少,子查询中的表大,又有索引时使用exists



分享到:
评论

相关推荐

    搞懂mysql的exists

    MySQL中的`EXISTS`子句是SQL查询语句中一种重要的条件判断操作,它用于测试子查询是否返回至少一行数据。在理解`EXISTS`的使用时,我们需要深入探讨其工作原理、优缺点以及与其他查询操作(如`IN`、`JOIN`)的对比。...

    SQL复习-EXISTS谓词

    本文将深入探讨EXISTS谓词的工作原理、用法以及其与IN和JOIN操作符的区别。 一、EXISTS谓词的基本概念 EXISTS谓词用于测试一个子查询是否至少返回一行数据,而不是关心返回的具体数据内容。其基本语法结构如下: ...

    mysql多表查询和EXISTS查询性能对比

    ### MySQL多表查询和EXISTS查询性能对比 #### 测试环境 在进行MySQL多表查询与EXISTS查询的性能对比之前,首先需要了解测试环境的相关配置。虽然原文中并未给出具体的测试环境细节,但在实际操作中,这一步骤至关...

    python-mysql.zip_MYSQL_pymysql_python MySQL_python连接mysql_连接数据库

    sql = "CREATE TABLE IF NOT EXISTS employees (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100))" cursor.execute(sql) ``` 5. **处理结果**:对于查询语句,可以使用`fetchone()`, `fetchall()`, 或 `...

    两种mysql递归tree查询效率-mysql递归tree

    DROP TABLE IF EXISTS `t_areainfo`; CREATE TABLE `t_areainfo` ( `id` int(11) NOT NULL AUTO_INCREMENT, `level` int(11) DEFAULT '0', `name` varchar(255) DEFAULT '0', `parentId` int(11) DEFAULT '0',...

    MySQL exists 和in 详解及区别

    MySQL中的`EXISTS`和`IN`都是在SQL查询中用来检查特定条件是否存在的子查询操作符,但它们的工作方式和适用场景有所不同。下面将详细解释这两个操作符的用法和区别。 ### `EXISTS`操作符 `EXISTS`主要用于判断子...

    问题-mysql解答1

    EXISTS和IN在处理子查询时,性能取决于子查询的结果集。当外部表(主查询中的表)的行数远大于内部表时,EXISTS通常更快,因为它只需要检查内部表的每个元素是否匹配。反之,如果内部表较大,IN可能更有效。 总结...

    MySQL中的in,exists,not in,not exists查询过程对比及结论

    MySQL优化之in,exists,not in,not exists的区别in与existsin查询过程结论:exists查询过程:结论:not in与not existsnot in查询过程:结论:not exists查询过程:结论: 首先我们使用两个用户表作为实例 insert ...

    Laravel开发-mysql-fulltext-laravel

    在上面的例子中,`MATCH (content) AGAINST ($query IN BOOLEAN MODE)`是MySQL的全文搜索语法,其中`$query`是用户输入的搜索关键词。 **全文搜索的模式** MySQL全文搜索支持两种模式:自然语言模式和布尔模式。...

    create-edit-update-and-delete-application-in-node.js-with-mysql:在 node.js 和 mysql 中创建编辑更新和删除应用程序

    create-edit-update-and-delete-application-in-node.js-with-mysql 在 node.js 和 mysql 中创建编辑更新和删除应用程序 在 node.js 和 mysql 中创建编辑更新和删除应用程序 操作说明 如何安装 首先需要创建mysql...

    深入浅出Mysql优化性能提升.txt

    21-Exists一定比子查询慢吗.wmv 22-Max Min非常规优化技巧.wmv 23-Count优化小技巧.wmv 24-巧用变量减少查询.wmv 25-MySQL主从集群配置.wmv 26-Binlog-Format的区别.wmv 27-主主复制.wmv 28-主主复制时的主键冲突...

    sql语句优化之用EXISTS替代IN、用NOT EXISTS替代NOT IN的语句

    SQL语句优化之用EXISTS替代IN、用NOT EXISTS替代NOT IN的语句 SQL语句优化是数据库性能优化的重要方面之一。在许多基于基础表的查询中,为了满足一个条件,往往需要对另一个表进行联接。在这种情况下,使用EXISTS...

    mysql not in、left join、IS NULL、NOT EXISTS 效率问题记录

    MySQL中的`NOT IN`, `LEFT JOIN`, `IS NULL`, 和 `NOT EXISTS` 是四种不同的SQL查询方式,它们在特定情况下可以实现相似的功能,但实际执行效率可能会有很大差异。本文主要探讨这四种方法在处理大数据量时的性能表现...

    mySQL中in查询与exists查询的区别小结

    MySQL中的`IN`查询和`EXISTS`查询都是在处理子查询时常用的操作,它们各自有不同的特性和适用场景。理解两者的区别对于优化SQL查询性能至关重要。 ### `IN`查询 `IN`查询通常用于检查某列的值是否在特定的值列表中...

    mysql exists与not exists实例详解

    mysql exists与not exists实例详解 tableA |column1 | column1 |column3 | tableb |column1 | column1 |column3 | 要查询 tableA 的数据,条件是是 tableA.column1 不在 tableB 的 tableB.column2 中 也就是要得到...

    MySQL中in与exists的使用及区别介绍

    在MySQL中,`IN` 和 `EXISTS` 都是用来在查询中筛选满足特定条件的行,但它们的工作原理和性能表现有所不同。了解这两者的差异对于优化SQL查询至关重要。 首先,`IN` 关键字用于在主查询中比较某个列的值是否存在于...

    mysql数据库In的优化.txt

    ### MySQL数据库In子句优化详解 #### 一、引言 在MySQL数据库的实际应用中,`IN`子句被广泛用于处理多个值的情况。当涉及到大量数据时,如何有效地使用`IN`子句成为了提高查询性能的关键。本文将详细介绍如何针对`...

    MYSQL IN 与 EXISTS 的优化示例介绍

    在SQL查询优化中,`IN` 和 `EXISTS` 子句经常被用来过滤结果集,但它们在执行效率上存在显著差异。了解这些差异并根据数据集的大小选择合适的子句是数据库性能调优的关键。 ### `IN` 与 `EXISTS` 原理 `IN` 子句...

    【mysql知识点整理】 — 准确理解 in 和 exists

    MySQL中的`IN`和`EXISTS`是两种常用的子查询操作符,用于比较单个值或一组值在主查询中的存在性。理解它们的工作原理和性能特性对于编写高效的SQL查询至关重要。 1. **IN** - **数据量与索引**:关于`IN`后面的...

Global site tag (gtag.js) - Google Analytics