对于大量left join 的表查询,可以在关键的 连接节点字段上创建索引。

问题:

  1. 大量的left join 怎么优化
  2. select a.id,a.num,b.num,b.pcs,c.num,
  3. c.pcs,d.num,d.pcs,e.num,e.pcs,a.x,
  4. a.y from a left join b.id=a.id and b.time=a.time
  5. left join c.id=a.id and b.time=a.time
  6. left join d.id=a.id and b.time=a.time
  7. left join e.id=a.id and b.time=a.time
  8. where a.time='2013-10-1'
  9. 这样查询效率很低,要几十分钟才能出laugh数据~每张表有上千万条数据,求问该如何优化?

答案:

  1. 在各个表的idtime属性上创建索引,而且把其中除了第一次left join中的 b.time=a.time外,其余的 b.time=a.time去掉,并先对b表执行 b.time='2013-10-1'的查询。
  2. 如果各表都需要判断时间的话,那么请先在各表上执行基于时间的选择操作,在参加左外连接。因此,时间字段上的索引很重要。

实例:自己实践经验:

  1. select --------------------------首先各个物料在各个期间的返利金额,然后根据每个期间求出对应每个月的返利总和-----------------------------------
  2. GZB.customer,GZB.company,GZB.jt,GZB.pz,
  3. ' then GZB.sl*GZB.fldj end) 二月,
  4. ' then GZB.sl*GZB.fldj end) 四月,
  5. ' then GZB.sl*GZB.fldj end) 六月,
  6. ' then GZB.sl*GZB.fldj end) 八月,
  7. ' then GZB.sl*GZB.fldj end) 十月,
  8. ,)), ,))
  9. from
  10. ( ----------------------------先把每个物料的返利单价,和对应的期间算出来------------------------
  11. select
  12. wldw.lswldw_dwmc customer,dw.lsbzdw_dwmc company,org.organizationname jt,ms.materialsortname pz,
  13. gs.issfiscalperiod qj,nvl(gm.actoutquantity,) sl,))))))) fldj
  14. from goodsmovement gs
  15. left join goodsmovementitem gm on gs.goodsmovementid=gm.goodsmovementid
  16. left join lswldw wldw on wldw.lswldw_wldwbh=gs.customerid
  17. left join lsbzdw dw on dw.lsbzdw_dwbh=gs.isscompanyid
  18. left join organizations org on gs.issorgid=org.organizationid --生产机台
  19. left join materials m on m.materialid=gm.materialid
  20. ,)
  21. ,)'
  22. '
  23. group by wldw.lswldw_dwmc,dw.lsbzdw_dwmc,org.organizationname,ms.materialsortname ,
  24. gs.issfiscalperiod ,nvl(gm.actoutquantity,)
  25. ) GZB
  26. group by GZB.customer,GZB.company,GZB.jt,GZB.pz;

对于这段SQL,自己查询需要等待14秒出来结果。

但是给各表的关联字段上添加索引之后:

  1. create index gs_index on goodsmovement(goodsmovementid)
  2. create index gm_index on goodsmovementitem(goodsmovementid)
  3. create index gs_index1 on goodsmovement(customerid)
  4. create index gs_index2 on goodsmovement(isscompanyid)
  5. create index gs_index3 on goodsmovement(movetypeid)
  6. create index gs_index4 on goodsmovement(issorgid)
  7.  
  8. create index dwbh on lswldw (lswldw_wldwbh)

查询速度大大提高:只需要0.17秒,快了几百倍!

对于大量left join 的表查询,可以在关键的 连接节点字段上创建索引。的更多相关文章

  1. mybatis逆向工程,实现join多表查询,避免多表相同字段名的陷阱

    ​ mybatis逆向工程,实现join多表查询,避免多表相同字段名的陷阱 ​ 前言:使用 mybatis generator 生成表格对应的pojo.dao.mapper,以及对应的example的 ...

  2. Django ORM queryset object 解释(子查询和join连表查询的结果)

    #下面两种是基于QuerySet查询 也就是说SQL中用的jion连表的方式查询books = models.UserInfo.objects.all() print(type(books)) --- ...

  3. mysql中各种join连表查询总结

    通常我们需要连接多个表查询数据,以获取想要的结果. 一.连接可以分为三类: (1) 内连接:join,inner join (2) 外连接:left join,left outer join,righ ...

  4. LEFT JOIN 多表查询的应用

    表结构如下:只把主要字段列出 表一:付款记录表  Gather 字段:GatherID , AccountID, PayMents 金额, PayWay  付款方式 1 现金 2 刷卡 表2:销售记录 ...

  5. sql多表查询时怎么获取查到的字段

    首先,多表查询不能用hql(貌似hql就是不支持多表查询,如果可以,希望看到的朋友给个例子) List list = systemService.findListbySql("SELECT ...

  6. mysql常用基础操作语法(八)~~多表查询合并结果和内连接查询【命令行模式】

    1.使用union和union all合并两个查询结果:select 字段名 from tablename1 union select 字段名 from tablename2: 注意这个操作必须保证两 ...

  7. Mysql学习总结(24)——MySQL多表查询合并结果和内连接查询

    1.使用union和union all合并两个查询结果:select 字段名 from tablename1 union select 字段名 from tablename2: 注意这个操作必须保证两 ...

  8. oracle锁表查询,资源占用,连接会话,低效SQL等性能检查

    查询oracle用户名,机器名,锁表对象 select l.session_id sid, s.serial#, l.locked_mode, l.oracle_username, l.os_user ...

  9. 【mysql】mysql中单列索引、联合索引、Join联表查询建立索引 和 EXPLAIN的分析使用

    2.创建联合索引,从坐到右分别为:userid.openId.name   2. #### --------------  多表联合查询 update 2019/03/13  ------------ ...

随机推荐

  1. Double 数据保留两位小数二:直接截取小数后面两位,不进行四舍五入

    package com; public class T2 { public static void main(String[] args) { System.out.println(calculate ...

  2. Android项目实战(二十):浅谈ListView悬浮头部展现效果

    先看下效果:需求是 滑动列表 ,其中一部分视图(粉丝数,关注数这一部分)在滑动到顶端的时候不消失,而是停留在整个界面头部. 我们先分析要解决的问题: 1.如何实现列表ListView顶部视图跟随Lis ...

  3. app名字后面的描述怎么加?

    构建一个最新的版本  更改一下 名称即可

  4. 查看特定View的默认属性值

    当我在分析focus.touch事件处理代码时发现,有些属性对代码的逻辑有非常重要的影响,比如clickable.focusable 这些属性.这时我们自然而然的想到,那么这些属性的默认值是什么呢?在 ...

  5. 一位资深开发的个人经历 【转自百度贴吧 java吧 原标题 4年java 3年产品 现在又开始做android了】

    楼主2007年从一家天津的三流大学毕业.毕业前报了一个职位培训,毕业后可以推荐工作.因为推荐的公司都是北京的,所以就来北京了. 找了一个月工作,没有找到要我的,就在出租屋里宅了起来,打着考研的旗号,又 ...

  6. Maven在Windows上的安装与配置

    下载Maven 1.进入Maven官网下载:maven.apache.org(点击进入或复制浏览器地址栏,回车进入) 注意事项:需要大家要注意的是(截至目前2015年12月1日)最新版本的Maven3 ...

  7. Mongodb源代码阅读笔记:Journal机制

    Mongodb源代码阅读笔记:Journal机制 Mongodb源代码阅读笔记:Journal机制 涉及的文件 一些说明 PREPLOGBUFFER WRITETOJOURNAL WRITETODAT ...

  8. 关于UNPIVOT 操作符

    UNPIVOT 操作符说明 简而言之,UNPIVOT操作符就是取得一个行的数据集合,然后把每一行都转换成多个行数据.为了更好地理解,请看下图: 图1 从上图中,你能发现UNPOVOT操作符,取得了两行 ...

  9. Apache安装问题:configure: error: APR not found . Please read the documentation

    Linux上安装Apache时,编译出现错误: checking for APR... no configure: error: APR not found .  Please read the do ...

  10. RabbitMQ入门教程——.NET客户端使用

    众所周知RabbitMQ使用的是AMQP协议.我们知道AMQP是一种网络协议,能够支持符合要求的客户端应用和消息中间件代理之间进行通信. 其中消息代理扮演的角色就是从生产者那儿接受消息,并根据既定的路 ...