Exists关键字:

exists表示存在,是对外表做loop循环,每次loop循环再对内表(子查询)进行查询,那么因为对内表的查询使用的索引(内表效率高,故可用大表),而外表有多大都需要遍历,不可避免(尽量用小表),故内表大的使用exists,可加快效率;它常常和子查询配合使用,例如下面的SQL语句

SELECT * FROM `user` WHERE exists (SELECT * FROM `order` WHERE user.id = order.user_id)

exists用于检查子查询是否至少会返回一行数据,该子查询实际上并不返回任何数据,而是返回值True或False。

当子查询返回为真时,则外层查询语句将进行查询。

当子查询返回为假时,外层查询语句将不进行查询或者查询不出任何记录

In关键字:

in是把外表和内表做hash连接,先查询内表,再把内表结果与外表匹配,对外表使用索引(外表效率高,可用大表),而内表多大都需要查询,不可避免,故外表大的使用in,可加快效率。

SELECT * FROM `user` WHERE id in (SELECT user_id FROM `order`)

in()语句只会执行一次,它查出order表中的所有user_id字段并且缓存起来,之后,检查user表的id是否和order表中的user_id相当,如果相等则加入结果期,直到遍历完user的所有记录。

如果用not in ,则是内外表都全表扫描,无索引,效率低,可考虑使用not exists,也可使用A left join B on A.id=B.id where B.id is null 进行优化。

总结:

内表数据大的使用exists,外表数据大的使用in;

参考:

MySQL中exists和in的区别及使用场景

java mysql in_MySQL中Exists和In的使用相关推荐

  1. java mysql settings_Java中使用MySQL从安装、配置到实际程序测试详解

    By zieckey(zieckey@yahoo.com.cn) All Rights Reserved! 这里假设你的Java开发环境已经搭建好了. 一.准备工作: 下载MySQL:mysql-5. ...

  2. java mysql tinyint_Msq 中tinyint字段对应 java中哪个类型?

    展开全部 MySql 中的tinyint(1)的使用 在MySql中如何定义像Java中类型的Boolean类型数据..其实,mysql中 是没有直接定义成Boolean这种数据类型. 它只能定义成 ...

  3. java mysql insert_MySQL中INSERT的一般用法

    INSERT语句是最常见的SQL语句之一,但是MySQL中INSERT语句的用法和标准用法不尽相同,下文就为您详细介绍MySQL中INSERT的一般用法,供您参考. 1用法 在标准的SQL语句中,一次 ...

  4. java mysql aio_Java中的NIO,BIO,AIO分别是什么

    Java中的NIO,BIO,AIO分别是什么 BIO:同步并阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开 ...

  5. java mysql 1366_MySql中的error-code='1366', sqlstate='HY000'错误

    前几个数的插入没有问题,但随着插入的次数增多,出现了这个错误,Hibernate:insertintolink(text,url,description,create_time,author,intr ...

  6. java mysql 语句中 大于 小于 等于 的写法

    在项目中使用 mybatis 写 sql 语句时,遇到需要进行大于小于比较的逻辑,在 sqlyog 中直接写 > 或 < 可以正常运行 sql ,但是项目启动起来就报 sql 错误异常. ...

  7. java mysql curd_javaweb中为mysql的curd多个值的语句

    更新语句 String sql = "update student set num=?,name=?,birthday=?,score=?,password=? where id=?&quo ...

  8. mye连接mysql数据库_MySQL_如何在Java程序中访问mysql数据库中的数据并进行简单的操作,在上篇文章给大家介绍了Myeclip - phpStudy...

    如何在Java程序中访问mysql数据库中的数据并进行简单的操作 在上篇文章给大家介绍了Myeclipse连接mysql数据库的方法,通过本文给大家介绍如何在Java程序中访问mysql数据库中的数据 ...

  9. 获取mysql可行方法_Mysql学习Java实现获得MySQL数据库中所有表的记录总数可行方法...

    <Mysql学习Java实现获得MySQL数据库中所有表的记录总数可行方法>要点: 本文介绍了Mysql学习Java实现获得MySQL数据库中所有表的记录总数可行方法,希望对您有用.如果有 ...

最新文章

  1. lxml xpath 爬取并正常显示中文内容
  2. 分割2021PanopticFCN
  3. DCMTK:C ++字符串类OFString的测试程序
  4. python学习笔记7--面向对象进阶,异常处理,socket编程初识
  5. 高质量 Node.js 微服务的编写和部署
  6. 江苏机器人竞赛南航_挑战不止 热血不息!1000余名青少年决战江苏省机器人普及大赛!...
  7. java batik_batik详解1
  8. GOF-23种设计模式UML图
  9. STM32F1移植到STM32F407 (LD3320)
  10. MATLAB学习:解一阶常系数微分方程
  11. 神奇的大脑 神经网络
  12. vue+element实现手机号验证码注册
  13. 简单入侵ftp服务器
  14. LibGdx 安装使用
  15. 张小龙:微信十年的产品思考
  16. vim增加php自动补全
  17. 如何使用CSS画一个圆圈?圆圈中间写字?
  18. Chrome安装JsonView插件指南
  19. 想给他打领带吗?(图)
  20. 【代理设置】Linux Windows 系统下各工具设置代理方式笔记(整理中)

热门文章

  1. mysql 转pxc_PXC 配置笔记-从MySQL直接转成PXC集群
  2. java fseek_转到C中的二进制文件的某个点(使用fseek),然后从该位置读取(使用fread)...
  3. python窗体开发环境_Python窗口开发环境boa-constructor教程2:创建状态栏:
  4. 零基础入门学习Python(8)-了不起的分支和循环3
  5. IJMS:牧医所奶业创新团队在瘤胃微生物新型脲酶抑制剂开发方面取得新进展
  6. 科学通报:合成微生物群落的构建与应用
  7. Nature综述:菌根共生的独特性和共性
  8. KEGG功能注释工具 KofamKOALA 安装与使用
  9. R语言广义线性模型函数GLM、广义线性模型(Generalized linear models)、GLM函数的语法形式、glm模型常用函数、常用连接函数、逻辑回归、泊松回归、系数解读、过散度分析
  10. Matplotlib使用scatter函数在Python中绘制气泡图(bubble plot)、通过size参数指定数据点的大小