zoukankan      html  css  js  c++  java
  • 用Left join代替not in

    很多人都知道 在各种数据库里面 not in 的效率极其低下.例如

    select * from a

    where a.id not in (

          select id from b

    )

    我们假如a表有 10万条记录,

    而b表里面也有10万条记录,

    那么需要的判断是 10万 乘以 10万 ,则是100亿次判断.所以执行效率极其低下.

    即使发现存在就返回.那么也有 100亿/2=50亿次判断.

    此时,我们可以用 Left join 来进行判断则快很多

    select a.* from a

    left join b

          on a.id=b.id

    where b.id is null

    我相信这句语句大家都看的懂,相对来说.这里只要进行10万数据连接,然后进行10万次判断就可以了.总共只有20万次.

    而10万数据连接来说,速度是很快的.

    100亿/20万 相差 5万倍速度.  

    50亿/20万 相差 2.5万倍速度.

    对于这个来说,假如a 表的数据越多,则提成的越快.

    当然我这个上面涉及的是 a,b表里面都没有重复的ID,假如涉及到重复的ID.则可以通过 except 等字进行过滤.从而提高连接速度.

    而在  distinct  和  left join 之间的效率就需要你的经验来判断了

  • 相关阅读:
    返回一个整数数组中子数组的最大值
    软工概论第二周个人项目四则运算二(改进)
    构建之法阅读笔记01
    单例模式
    .net基础加强
    使用jquery easy ui
    抽象工厂类
    System.Linq.Expressions.Expression
    创建上下文对象
    DBSesson
  • 原文地址:https://www.cnblogs.com/yangyi9343/p/6546909.html
Copyright © 2011-2022 走看看