日期:2014-05-16  浏览次数:20727 次

寻求一个数据处理解决方案
系统目前的情况是:
1.有几个主要的业务表A,B,C,数据量分别上亿。
2.5个表D,E,F,G,H,控制权限的。
一般查询是
with X as (select x,y,z from D,E,F,G,H)---X大约有1W以内的记录数
select X.x,A.a1,A.a2 from A left join X on A.x=X.x where ...
或者是
select ... from A,D,E,F,G,H where ... where ...
目前系统中类似查询很多,已经根据具体情况做索引,整体效果感觉很慢

求高手指点一个能大幅提高效率的策略,比如使用临时表,生成中间表,需要注意什么问题

------解决方案--------------------
1、检查执行计划,看你的索引是否使用?

2、如果多个表需要和X表关联,可以先将X表的数据做一个临时表或者中间表保存在哪,以便和其他表关联。

3、上亿的数据量一定要索引,先将小数据量的表先关联查询,放入到临时表,最后使用该临时表和大表关联,
注意不要一次性关联3个表以上,最好是两两关联,而且能够过滤掉大数据量的关联先在前面处理。
------解决方案--------------------
实际业务是如何的,楼主好像并没有提到。 还是建议将业务要求了解一下,这些查询主要是做什么用的,又有什么特殊条件。
接下来,再考虑是否可以分离成小数据量的查询。

索引 不是万能的,分区 也不是万能的,物化视图、中间表 也要看实际业务流程与逻辑复杂度(再加上数据的实时性要求)。 
这些也都只是技术上的问题,数据质量又是否考虑了呢? 基础数据表中,是否需要进行一下清理,优化一下表结构,整理一下表碎片了呢?