zoukankan      html  css  js  c++  java
  • 表关联的一点优化

    情况是这样的:

    DBA找上们来,说我们的SQL扫全表了,执行效率不高,需要优化一下。

    SQL的结构大概是这个样子:

    select *

    from A left join B

    on A.num = B.num

    where A.confirm_time > ?

    and A.confirm_time < ?

    A的num,B的num,A的confirm_time是有索引的。数据库是DB2

    执行计划看出B是扫描了全表的,这也是DB2比较奇怪的地方,它会按照自己想法走,就是不喜欢num这个索引。。。

    查看B表,B表的create_time是有索引的,于是优化

    select *

    from A left join B

    on (A.num = B.num and B.create_time>? and B.create_time<?)

    where A.confirm_time > ?

    and A.confirm_time < ?

    原来执行80秒的SQL,现在执行3秒。

    网上找到了一个图

    on里面关于副表的条件会先生效,这也是上面SQL用时大幅度减少的原因,通过create_time过滤掉了大部分数据以后才联表。

    据我观察,on条件里面关于主表的条件没有什么作用,传说也能提高一些效率,但那只是传说。

  • 相关阅读:
    jquery收集
    c#语法
    asp.net+MVC
    在线OFFICE方案
    NodeJs中require use get typescript及其他知识点集合
    $.data()
    mongodb 安装、windows服务、创建用户
    Nodejs&Express
    Nodejs + MongoDb
    Nodejs
  • 原文地址:https://www.cnblogs.com/coolgame/p/9067679.html
Copyright © 2011-2022 走看看