• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >Mysql > sql语句优化之用EXISTS替代IN、用NOT EXISTS替代NOT IN的语句

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

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2018-12-05

匿名通过本文主要向大家介绍了sql语句优化之用EXISTS替代IN、等相关知识,希望本文的分享对您有所帮助

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

在许多基于基础表的查询中,为了满足一个条件,往往需要对另一个表进行联接。在这种情况下, 使用EXISTS(或NOT EXISTS)通常将提高查询的效率。在子查询中,NOT IN子句将执行一个内部的排序和合并。无论在哪种情况下,NOT IN都是最低效的 (因为它对子查询中的表执行了一个全表遍历)。为了避免使用NOT IN ,我们可以把它改写成外连接(Outer Joins)或NOT EXISTS。

如

我要查询 Sendorder表中的冗余数据(没有和reg_person或worksite相连的数据)

sql="select Sendorder.id,Sendorder.reads,Sendorder.addtime from Sendorder where Sendorder.person_id not in(select user_id from reg_person ) or Sendorder.worksite_id not in(select id from worksite) order by Sendorder.addtime desc"
程序执行时间:40109.38毫秒

sql="select Sendorder.id,Sendorder.reads,Sendorder.addtime from Sendorder where not EXISTS (SELECT id FROM reg_person where reg_person.user_id=Sendorder.person_id) or not EXISTS (SELECT id FROM worksite where worksite.id=Sendorder.worksite_id) order by Sendorder.addtime desc"
程序执行时间:8531.25毫秒

很明显使用not EXISTS效率高多了
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

相关文章

  • 2018-12-05Slave memory leak and trigger oom-killer_MySQL
  • 2018-12-05mysql学习笔记:存储过程
  • 2017-05-11MySQL Antelope和Barracuda的区别分析
  • 2018-12-05mYsql日期和时间函数不求人
  • 2017-05-11如何恢复Mysql数据库的详细介绍
  • 2018-12-05动态给表添加删除字段并同时修改它的插入更新存储过程
  • 2018-12-05Oracle EXTRACT()函数
  • 2018-12-05MySQL全文索引应用简明教程
  • 2018-12-05关于SQL Server 的全文搜索功能详解
  • 2017-05-11mysql 维护常用命令

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • Access清空表后让编号复位
    • mysql update语句的用法详解
    • 关于节点配置的详细介绍
    • 使用distinct在mysql中查询多条不重复记录值的解决办法
    • sqlserver中更改数据库所属为dbo的方法
    • Mysql使用命令实现分级查找帮助的方法
    • MySQL定时器开启、调用实现代码
    • Linux系统下查看mysql版本的四种方法
    • MySQL如何实现多表查询?MySQL多表查询的语句
    • 一些mysql启动参数的说明和优化方法

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有