详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt345

mysql中的in语句是把外表和内表作hash 连接,而exists语句是对外表作loop循环,每次loop循环再对内表进行查询。一直大家都认为exists比in语句的效率要高,这种说法其实是不准确的。这个是要区分环境的。

如果查询的两个表大小相当,那么用in和exists差别不大。

如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in:

例如:表A(小表),表B(大表)

1:

select * from A where cc in (select cc from B) 效率低,用到了A表上cc列的索引;

select * from A where exists(select cc from B where cc=A.cc) 效率高,用到了B表上cc列的索引。

相反的

2:

select * from B where cc in (select cc from A) 效率高,用到了B表上cc列的索引;

select * from B where exists(select cc from A where cc=B.cc) 效率低,用到了A表上cc列的索引。

not in 和not exists如果查询语句使用了not in 那么内外表都进行全表扫描,没有用到索引;而not extsts 的子查询依然能用到表上的索引。所以无论那个表大,用not exists都比not in要快。

in 与 =的区别

select name from student where name in ('zhang','wang','li','zhao');

select name from student where name='zhang' or name='li' or name='wang' or name='zhao'

的结果是相同的。

MySql中in和exists效率相关推荐

  1. MySQL中In与Exists的区别

    MySQL中In与Exists的区别 1 例子 2 EXISTS和IN的介绍 2.1 exists 2.2 in 2.3 使用上的区别 3 EXISTS和IN的性能分析 4 总结 1 例子 有两个表需 ...

  2. 软件测试mysql面试题:mysql中 in 和 exists 区别?

    mysql中 in 和 exists 区别? mysql中的in语句是把外表和内表作hash 连接,而exists语句是对外表作loop循环,每次loop循环再对内表进行查询.一直大家都认为exist ...

  3. mysql中使用join exists in时该注意的问题

    2019独角兽企业重金招聘Python工程师标准>>> 这是个老生常谈的问题,平时在简单使用过程中,都能得到想要的结果,但是对于各自的性能,以及适用场景,我们该注意什么?假如现在有表 ...

  4. MySQL中IN和EXISTS的用法

    exists对外表用loop逐条查询,每次查询都会查看exists的条件语句,当 exists里的条件语句能够返回记录行时(无论记录行是的多少,只要能返回),条件就为真,返回当前loop到的这条记录, ...

  5. mysql 提高事物效率_怎么提高向mysql中插入数据的效率-问答-阿里云开发者社区-阿里云...

    String[] filelist = file.list(); for(String filename : filelist){ BufferedReader br = new BufferedRe ...

  6. 检测mysql中sql语句的效率

    1.通过查询日志 启动Mysql时加参数--log-slow-queries来记录执行时间超过long_query_time秒的sql MySQL 自带 slow log 的分析工具 mysqldum ...

  7. Mysql中几种插入效率的实例对比

    前言 最近因为工作的需要,要在Mysql里插入大量的数据大约1000w,目测会比较耗时.所以现在就像测试一下到底用什么插入数据的方法比较快捷高效. 下面就针对每一种方法分别测试不同数据量下的插入效率. ...

  8. mysql varchar 效率_由MySQL中char和varchar效率想到的

    对比char和varchar随便在google或百度中搜一下得到的结论大概都是"char定长,varchar不定长,char要比varchar占用更多的空间,由于定长char的效率高于var ...

  9. mysql中in和exists的应用场景_mysql中关于in和exists的使用

    使用的数据库如下: in语句:常用于where表达式中,其作用是查询某个范围内的数据,只执行一次. SELECT * FROM  city  WHERE  pid  IN(SELECT  pid  F ...

  10. mysql执行效率低_如何查询mysql中执行效率低的sql语句

    展开全部 一.MySQL数据库有几个配置选项可以32313133353236313431303231363533e59b9ee7ad9431333337373563帮助我们及时捕获低效SQL语句 1, ...

最新文章

  1. 13委托和事件在观察者模式中的应用
  2. 对docker容器的增加或减少进行报警
  3. anaconda tensorflow 2.3_TensorFlow 速成 | 统计师的Python日记 第13天
  4. 中国中草药提取物市场需求容量与投资价值预测报告2022年
  5. python中的装饰器怎么运行_Python 装饰器入门(上)
  6. 人工智能ai知识_人工智能中基于知识的代理层
  7. 如何在不跳转的情况下实现用户登录
  8. 啥是Attention?
  9. coursera_ML_1
  10. Oracle 12c 新特性:SQL Plan Directives与过量的动态采样解析
  11. C语言常见基础错误大全总结
  12. datatable某一行第N列为空的时候删除某一行
  13. html5中defer的属性,HTML5中defer和async的比较
  14. cvErode() 形态腐蚀(可多次)
  15. ABP文档 - 通知系统
  16. 盘点员工工作效率低的8大原因
  17. 做移动视频直播应用的思路
  18. 大家之言 | 谈“网络安全终身教育”
  19. mysql二亿大表_面对有2亿条数据的mysql表
  20. 《C语言程序设计》江宝钏主编-习题6-2-排列数

热门文章

  1. [c# 20问] 4.Console应用获取执行路径
  2. Libevent源码解析
  3. 在ASP.NET MVC中使用“RadioButtonList”和“CheckBoxList”
  4. 《算法导论》第7章 快速排序 (四种变形)
  5. spring异常+自定义以及使用
  6. 使用读写管道作为事件通知的C++实现
  7. 20180330试试水
  8. 2017-2018 ACM-ICPC, NEERC A题Automatic Door 挺棘手的模拟
  9. 深入理解JVM虚拟机(一):JVM运行时数据区
  10. BZOJ 2957 分块