当前位置: 代码迷 >> Oracle开发 >> 大神,数据库的多表大数据连接查询应怎么优化
  详细解决方案

大神,数据库的多表大数据连接查询应怎么优化

热度:49   发布时间:2016-04-24 06:35:05.0
求助大神,数据库的多表大数据连接查询应如何优化?
本帖最后由 xylcxyfc 于 2014-10-20 11:18:18 编辑
oracle数据库中现有10张客户信息表,其中5张表是每张400万条记录,另5张表是每张10万条记录,每张表都有一个通用主键cust_id(客户号),业务数据每天定时更新。
现在前台需要显示每个客户的所有信息,也就是说根据客户号查询这10张表,但只取其中的部分有用字段,由于表太多数据量太大,肯定不能在前台直接查询原表,那么问题来了:
1,是在数据库中建立合并的视图好还是实表好;
2,建立实表的话在过程中应如何优化,不可能一个劲地连接吧,400w多表笛卡尔积想想就可怕。

现有方案不知道好不好:
方案1
建立合并的实表,然后在过程中建立5张临时表,这5张临时表分别存储一张400w与一张10w的数据,最后再把这5张表合并到那张实表。 

方案2:
建立合并的实表,然后在过程中建立4张临时表,第一张临时表加载两张表的数据(配合随意),第二张临时表加载第一张临时表与另外两张业务表连接后的数据,第三张再加载第二张连接两张业务表的数据,这样以此类推,最后合并的实表正好加载完。
------解决思路----------------------
各个表在cust_id上建索引,400万数据量不是太大,用索引查询速度应该还可以
前台显示所有信息也是一个客户一个客户的显示吧,每次需要在前台显示的数据量应该也不会太大的
------解决思路----------------------
1、各个表在cust_id上建索引
2、如果担心速度,可以单个查,得到10个datatable,然后组建一个新datatable
------解决思路----------------------
一个表可以建多个索引的,如果每个表都有cust_id的索引,速度应该挺快的
------解决思路----------------------
1、一个表可以有多个索引,但是一般要求一个表的索引数量不超过3个

2、举个例子说比较明白
假设两个表都是100条从每张表取10条
关联之后就变成了从100×100条数据中取出20条
哪个快哪个慢不是很明显吗?
单独取数据比关联之后取数据肯定要快的
------解决思路----------------------
临时表。
你自己不是做过测试吗,尝试下时间多少。
------解决思路----------------------
引用:
Quote: 引用:

临时表。
你自己不是做过测试吗,尝试下时间多少。

临时表肯定查询很快的,关键是生成这个临时表需要多少时间,服务器是否有那么长的空闲时间来做这些
但是不管哪个方案,各个表cust_id的索引都是必需的,
建议先把相关索引建起来,然后再测试各个方案的执行效率

前台表一边都是要建索引,只是楼主这种情况感觉先要弄个临时表。
------解决思路----------------------
首先客户信息需要10张表关联,感觉是不是你的表结构设置有问题,如果要真实这样子的可以考虑物化视图来做
------解决思路----------------------
如果不常更新的话,建议用物化视图。
  相关解决方案