mySQL中in查询与exists查询的区别小结
作者:daisy 时间:2024-01-20 22:26:00
一、关于exists查询
explain select * from vendor where EXISTS(select * from area where area_code = vendor_prov_code ) limit 10
以上是一个典型的exists查询的sql语句。
它的作用方式是这样的:每次从vendor表中查询出一条数据,然后将这条数据中的vendor_prov_code
值传递到exists查询中进行执行,也就是进行子查询的执行。
如果子查询查到的数据就返回布尔值true,如果没有就返回布尔值false。返回布尔值true则将该条数据保存下来,否则就舍弃掉。也就是说exists查询,是查询出一条数据就执行一次子查询。
需要注意的是:exists …. 只能返回布尔值true或者false,其他的字段并不会进行返回的。
二、关于in查询
explain select * from vendor where vendor_prov_code in (select area_code from area ) limit 10
上面就是一条关于in查询的sql语句。
它的作用方式是这样的:先执行子查询,也就是in()
所包含的语句。子查询查询出数据以后,将前面的查询分为n次普通查询(n表示在子查询中返回的数据行数)。也就是例如以下的执行步骤:
select * from doub_vendor where vendor_prov_code = 子查询结果1
.......
.......
select * from doub_vendor where vendor_prov_code = 子查询结果n
网上有人在争exists查询与in查询的效率问题,这里得说以下,不同的mysql版本,不同的业务,不同的数据,执行效率是不一定的,这里涉及到了mysql优化器对sql语句的优化,子查询的数据量问题等等。
网上还有人说mysql5.6版本对in查询做了很好的优化,所以效率问题要看具体的场景,要看真实测试的数据来进行优化!
总结
标签:mysql,in,exists
0
投稿
猜你喜欢
在Mysql上创建数据表实例代码
2024-01-22 17:40:39
python使用timeit时间模块
2023-03-05 16:27:37
详解Python中的装饰器、闭包和functools的教程
2023-12-30 13:43:03
详细分析Python垃圾回收机制
2021-04-18 02:43:43
用python实现前向分词最大匹配算法的示例代码
2023-12-03 00:18:46
mysql存储过程之游标(DECLARE)原理与用法详解
2024-01-25 14:23:50
python去掉 unicode 字符串前面的u方法
2021-03-02 20:53:33
Python 面向对象编程详解
2023-06-25 05:24:23
golang 输出重定向:fmt Log,子进程Log,第三方库logrus的详解
2024-04-27 15:40:14
MySQL 基本概念
2011-09-10 16:22:34
10分钟教你用Python实现微信自动回复功能
2021-03-14 04:04:47
django 将自带的数据库sqlite3改成mysql实例
2024-01-19 14:52:21
Go 加密解密算法小结
2024-04-26 17:29:00
PHP实现获取两个以逗号分割的字符串的并集
2023-06-01 03:24:53
Oracle19c 创建表空间遇到的坑
2024-01-15 14:18:24
用asp实现读取文件的最后一行的代码
2011-03-08 10:55:00
Python Tornado框架轻松写一个Web应用的全过程
2022-05-10 10:38:36
Javascript脚本实现静态网页加密实例代码
2024-04-19 11:04:30
Vue 2.0入门基础知识之内部指令详解
2024-05-10 14:17:19
Django+Uwsgi+Nginx如何实现生产环境部署
2023-02-08 00:48:48