多个关联表的优化?

经常碰到类似这样的语句

假设有5个表,每个表都是500万左右的记录
表名是a,b,c,d,e
语句如下

select a.id
from a
left join b on a.id=b.id
left join c on c.custno=d.custno
left join d on d.name=e.name and e.startdate>='20171026'

假设表上语句where字段上的索引都有,统计信息也是最新的,
请问这样的语句如何优化?

参与18

4同行回答

anikikonganikikong课题专家组数据库运维工程师中国民生银行
这个查询没有过虑条件,查询结果集就是很大。唯一的是e表基于时间,如果不是left join还可以用的上。显示全部

这个查询没有过虑条件,查询结果集就是很大。唯一的是e表基于时间,如果不是left join还可以用的上。

收起
银行 · 2018-05-25
DB-TrendSetterDB-TrendSetter联盟成员数据库架构师公司
可优化的空间很小,如果base table a,b,c,d的数据变化量很小,可以把查询结果固化到MQT中,以提高查询性能。显示全部

可优化的空间很小,如果base table a,b,c,d的数据变化量很小,可以把查询结果固化到MQT中,以提高查询性能。

收起
电信运营商 · 2018-05-25
libai21libai21课题专家组软件架构设计师海通证券
这种语句很难优化,因为你的逻辑已经固定了,执行效率关键看e.startdate>‘20171026’这个条件能过滤出来的记录数,如果记录很少,效率也还可以接受,如果这个条件过滤出来的记录数过大,那么这个语句执行时间就会很长;或者接受,或者更高业务逻辑。...显示全部

这种语句很难优化,因为你的逻辑已经固定了,执行效率关键看e.startdate>‘20171026’这个条件能过滤出来的记录数,如果记录很少,效率也还可以接受,如果这个条件过滤出来的记录数过大,那么这个语句执行时间就会很长;或者接受,或者更高业务逻辑。

收起
证券 · 2018-05-25
liveonskyliveonsky数据库开发工程师sr
1.关联字段id、custno没问题,用离散性大的字段,并添加索引2.上面a、b表关联没问题 到在关联c表就产生笛卡尔集了,关联中最忌讳次情况发生3.a表示主表,其他都是left join 并不会减少数据量,若确定d表是筛选条件可以作为主表...显示全部

1.关联字段id、custno没问题,用离散性大的字段,并添加索引
2.上面a、b表关联没问题 到在关联c表就产生笛卡尔集了,关联中最忌讳次情况发生
3.a表示主表,其他都是left join 并不会减少数据量,若确定d表是筛选条件可以作为主表

收起
银行 · 2018-05-30

问题来自

相关问题

相关资料

相关文章

问题状态

  • 发布时间:2018-05-24
  • 关注会员:6 人
  • 问题浏览:5358
  • 最近回答:2018-05-30
  • X社区推广