今天在优化朋友的一个系统, 主要他们前期是叫人外包写的, 越来越慢, 导出订单明细时, 基本都是TimeOut, 我查看到这里面是这样写:

select * from Orders where ID in (select OrderID from OrderDetail where ProductSKU='106961105540')  and  CreateTime>='2019-01-01 12:51' and CreateTime<='2019-01-24 12:51'

括号里面OrderDetail查询到六千多条记录,

Orders 表一共81万多个记录

OrderDetail 表有180万多个记录

我的天哪, 怎可能不会TimeOut呢, 查询都要几十秒才执行出来结果。

最后使用Join来帮他修改一下,SQL改成这样

select * from (select * from Orders where Flag>0 and createtime>='2019-01-01 12:51' and createtime<='2019-01-24 12:51') as T1
inner join (select distinct(OrderID) from OrderDetail where  ProductSKU='106961105540') as T2 on T1.ID=T2.OrderID

这样执行, 只需要1秒左右就能执行出结果。

所以建立, 在In与Join中, 千万要用Join, 除非数据量好少, 每个表记录少于千以下, 不然千万不要做这种In的蠢事。

SQL Join 与 In的效率的更多相关文章

  1. SQL JOIN语法,以及JOIN where 和and区别,还有where和join效率问题。

    语法 join 用于根据两个或多个表中的列之间的关系,从这些表中查询数据. Join 和 Key 有时为了得到完整的结果,我们需要从两个或更多的表中获取结果.我们就需要执行 join. 数据库中的表可 ...

  2. Spark SQL join的三种实现方式

    引言 join是SQL中的常用操作,良好的表结构能够将数据分散到不同的表中,使其符合某种规范(mysql三大范式),可以最大程度的减少数据冗余,更新容错等,而建立表和表之间关系的最佳方式就是join操 ...

  3. ORACLE的SQL JOIN方式小结

    在ORACLE数据库中,表与表之间的SQL JOIN方式有多种(不仅表与表,还可以表与视图.物化视图等联结),官方的解释如下所示 A join is a query that combines row ...

  4. SQL JOIN\SQL INNER JOIN 关键字\SQL LEFT JOIN 关键字\SQL RIGHT JOIN 关键字\SQL FULL JOIN 关键字

    SQL join 用于根据两个或多个表中的列之间的关系,从这些表中查询数据. Join 和 Key 有时为了得到完整的结果,我们需要从两个或更多的表中获取结果.我们就需要执行 join. 数据库中的表 ...

  5. 转:画图解释 SQL join 语句

    画图解释 SQL join 语句 我认为 Ligaya Turmelle 的关于SQL联合(join)语句的帖子对于新手开发者来说是份很好的材料.SQL 联合语句好像是基于集合的,用韦恩图来解释咋一看 ...

  6. sql join 用法

    SQL JOIN 的用法   关于sql语句中的连接(join)关键字,是较为常用而又不太容易理解的关键字,下面这个例子给出了一个简单的解释 --建表table1,table2:create tabl ...

  7. [译文] SQL JOIN,你想知道的应该都有

    介绍 这是一篇阐述SQL JOINs的文章. 背景 我是个不喜欢抽象的人,一图胜千言.我在网上查找了所有的关于SQL JOIN的解释,但是没有找到一篇能用图像形象描述的. 有些是有图片的但是他们没有覆 ...

  8. SQL Join各种内联外联说明

    Visual Representation of SQL Joins C.L. Moffatt, 3 Feb 2009 CPOL    4.96 (406 votes) Rate this: This ...

  9. SQL Join简单介绍

    前沿 Join是关系型数据库系统的重要操作之一,SQL Server中包含的常用Join:内联接.外联接和交叉联接等. 如果我们想在两个或以上的表获取其中从一个表中的行与另一个表中的行匹配的数据,这时 ...

随机推荐

  1. 当namenode启动不了时

    重新格式即可,注意格式化前要将临时目录下的文件全部删除

  2. haproxy 配置文件分析

    LOG 功能: 编辑/etc/rsyslog.conf 配置文件: # Provides UDP syslog reception $ModLoad imudp #需要启用 $UDPServerRun ...

  3. 【Mongo】安装并配置副本集

    最近的一个小项目需要用到mongo,所以开始学习下mongo.本打算开三台虚机严格按照生产来配置,然后发现有点带不动,所以决定在一台上通过三个端口来模拟. 1.获取安装包 curl -O http:/ ...

  4. STM32C语言与MDK基础

    Ifdef条件编译 Extern相当于全文件的全局变量,使用前需声明,加extern就行 Static,只在当前.c文件起作用,也可以定义函数,作用是提供HALL库用,不是给用户用. Weak前加两个 ...

  5. gulp自动化构建工具的使用

    gulp自动化构建工具: 把前端开发常见的处理(“搬砖”)程序,通过一个工具模块管理起来,只需配置一次,达到自动处理目的,简化开发,提高效率!! 安装: 1.全局安装(全局安装一个gulp命令) A. ...

  6. iOS QQ 扫一扫 捷径URL

    *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...

  7. T2027 蜈蚣

    传送门 思路: 设 f[ i ][ j ] 为第 i 节,切到第 j 段的最大恶心值. 枚举 左端点 j ,右端点 i ,段数 k →  转移: f [ i ][ k ] = max ( f [ i ...

  8. linux如何查看所有的用户和组信息?

    cat /etc/passwd cat /etc/passwd查看所有的用户信息,详情如下图   [步骤二]cat /etc/passwd|grep 用户名 cat /etc/passwd|grep ...

  9. h5视频播放

    h5视频播放 一直在写js原生的东西,感觉总是停滞不前,现在我们应该学一些h5新的特性,因为我们毕竟是从事前端的,下面我们一起来写一个视频播放吧 1,html <div class=" ...

  10. Unity --- 如何简单的判断图片是否含有 alpha channel

    var texImporter = AssetImporter.GetAtPath(assetPath) as TextureImporter; if (texImporter.DoesSourceT ...