对于大量left join 的表查询,可以在关键的 连接节点字段上创建索引。
对于大量left join 的表查询,可以在关键的 连接节点字段上创建索引。
问题:
大量的left join 怎么优化 select a.id,a.num,b.num,b.pcs,c.num, c.pcs,d.num,d.pcs,e.num,e.pcs,a.x, a.y from a left join b.id=a.id and b.time=a.time left join c.id=a.id and b.time=a.time left join d.id=a.id and b.time=a.time left join e.id=a.id and b.time=a.time where a.time='2013-10-1' 这样查询效率很低,要几十分钟才能出laugh数据~每张表有上千万条数据,求问该如何优化?
答案:
在各个表的id和time属性上创建索引,而且把其中除了第一次left join中的 b.time=a.time外,其余的 b.time=a.time去掉,并先对b表执行 b.time='2013-10-1'的查询。 如果各表都需要判断时间的话,那么请先在各表上执行基于时间的选择操作,在参加左外连接。因此,时间字段上的索引很重要。
实例:自己实践经验:
select --------------------------首先各个物料在各个期间的返利金额,然后根据每个期间求出对应每个月的返利总和----------------------------------- GZB.customer,GZB.company,GZB.jt,GZB.pz, ' then GZB.sl*GZB.fldj end) 二月, ' then GZB.sl*GZB.fldj end) 四月, ' then GZB.sl*GZB.fldj end) 六月, ' then GZB.sl*GZB.fldj end) 八月, ' then GZB.sl*GZB.fldj end) 十月, ,)), ,)) from ( ----------------------------先把每个物料的返利单价,和对应的期间算出来------------------------ select wldw.lswldw_dwmc customer,dw.lsbzdw_dwmc company,org.organizationname jt,ms.materialsortname pz, gs.issfiscalperiod qj,nvl(gm.actoutquantity,) sl,))))))) fldj from goodsmovement gs left join goodsmovementitem gm on gs.goodsmovementid=gm.goodsmovementid left join lswldw wldw on wldw.lswldw_wldwbh=gs.customerid left join lsbzdw dw on dw.lsbzdw_dwbh=gs.isscompanyid left join organizations org on gs.issorgid=org.organizationid --生产机台 left join materials m on m.materialid=gm.materialid ,) ,)' ' group by wldw.lswldw_dwmc,dw.lsbzdw_dwmc,org.organizationname,ms.materialsortname , gs.issfiscalperiod ,nvl(gm.actoutquantity,) ) GZB group by GZB.customer,GZB.company,GZB.jt,GZB.pz;
对于这段SQL,自己查询需要等待14秒出来结果。
但是给各表的关联字段上添加索引之后:
create index gs_index on goodsmovement(goodsmovementid) create index gm_index on goodsmovementitem(goodsmovementid) create index gs_index1 on goodsmovement(customerid) create index gs_index2 on goodsmovement(isscompanyid) create index gs_index3 on goodsmovement(movetypeid) create index gs_index4 on goodsmovement(issorgid) create index dwbh on lswldw (lswldw_wldwbh)
查询速度大大提高:只需要0.17秒,快了几百倍!
对于大量left join 的表查询,可以在关键的 连接节点字段上创建索引。的更多相关文章
- mybatis逆向工程,实现join多表查询,避免多表相同字段名的陷阱
mybatis逆向工程,实现join多表查询,避免多表相同字段名的陷阱 前言:使用 mybatis generator 生成表格对应的pojo.dao.mapper,以及对应的example的 ...
- Django ORM queryset object 解释(子查询和join连表查询的结果)
#下面两种是基于QuerySet查询 也就是说SQL中用的jion连表的方式查询books = models.UserInfo.objects.all() print(type(books)) --- ...
- mysql中各种join连表查询总结
通常我们需要连接多个表查询数据,以获取想要的结果. 一.连接可以分为三类: (1) 内连接:join,inner join (2) 外连接:left join,left outer join,righ ...
- LEFT JOIN 多表查询的应用
表结构如下:只把主要字段列出 表一:付款记录表 Gather 字段:GatherID , AccountID, PayMents 金额, PayWay 付款方式 1 现金 2 刷卡 表2:销售记录 ...
- sql多表查询时怎么获取查到的字段
首先,多表查询不能用hql(貌似hql就是不支持多表查询,如果可以,希望看到的朋友给个例子) List list = systemService.findListbySql("SELECT ...
- mysql常用基础操作语法(八)~~多表查询合并结果和内连接查询【命令行模式】
1.使用union和union all合并两个查询结果:select 字段名 from tablename1 union select 字段名 from tablename2: 注意这个操作必须保证两 ...
- Mysql学习总结(24)——MySQL多表查询合并结果和内连接查询
1.使用union和union all合并两个查询结果:select 字段名 from tablename1 union select 字段名 from tablename2: 注意这个操作必须保证两 ...
- oracle锁表查询,资源占用,连接会话,低效SQL等性能检查
查询oracle用户名,机器名,锁表对象 select l.session_id sid, s.serial#, l.locked_mode, l.oracle_username, l.os_user ...
- 【mysql】mysql中单列索引、联合索引、Join联表查询建立索引 和 EXPLAIN的分析使用
2.创建联合索引,从坐到右分别为:userid.openId.name 2. #### -------------- 多表联合查询 update 2019/03/13 ------------ ...
随机推荐
- OC中的深拷贝与浅拷贝
深拷贝(deep copy)与浅拷贝(shallow copy)的定义一直是有争论的. 一种理解是: 所谓的浅拷贝, 就是不完全的拷贝 NSString *s = @"123"; ...
- iOS自定义字体
1.下载字体库,如:DINCond-Bold.otf 2.双击,在mac上安装 3.把下载的字体库拖入工程中: 4.配置info.plist文件 5.xib方式设置自定义字体:Font选Custom, ...
- switch-枚举
在swift中,如果switch的枚举,可以不写default,因为系统知道有多少种情况,如果不是枚举,必须要写default enum WBComposeToolBarButtonType:Int ...
- %1$s,%2$s等的用法
String.format(String format, Object... args)方法中: format:格式字符串. 如:%1$s,%1$d,%2$s... ...
- 我曾经的第一个OC程序
一. OC简介 C语言的基础上,增加了一层最小的面向对象语法 完全兼容C语言 可以在OC代码中混入C语言代码,甚至是C++代码 可以使用OC开发Mac OS X平台和iOS平台的应用程序 二. OC语 ...
- wpf开发桌面软件记录
我的开发环境是win7,vs2013,sql2012,用wpf开发了一个很简单的桌面软件,用Installshield制作的安装包,安装包包含了.framework4.5,在自己电脑上测试正常,想着挺 ...
- CSS3 background-size属性
请复制粘贴,图片请自带 <!DOCTYPE html > <html > <head> <meta charset="utf-8"> ...
- Javascript之旅——第七站:说说js的调试
最近比较吐槽,大家都知道,现在web前端相对几年前来说已经变得很重了,各种js框架,各种面对对象,而且项目多了,就会提取公共模块, 这些模块的UI展示都一样,不一样的就是后台逻辑,举个例子吧,我们做企 ...
- Apache的Order Allow,Deny 详解
Allow和Deny可以用于apache的conf文件或者.htaccess文件中(配合Directory, Location, Files等),用来控制目录和文件的访问授权. 所以,最常用的是: O ...
- mysql服务性能优化—my.cnf配置说明详解
MYSQL服务器my.cnf配置文档详解硬件:内存16G [client]port = 3306socket = /data/3306/mysql.sock [mysql]no-auto-rehash ...