性能讨论,根据实例!

[复制链接]
查看11 | 回复9 | 2016-1-7 20:57:31 | 显示全部楼层 |阅读模式
我现在某电信公司遇到这样一个问题:
算按月的收入,有帐单细节表bill_item,每月3000万记录

资产表(每个客户的资产,如某某客户的直线电话算作一个资产,数据记录数共一个亿左右,数据大小15G)
由于这两个表都很大,不能用SQL写Join,我现在的处理方法是在Bill_item上开cursor,然后每条记录到资产表上找相关信息,如客户及相关信息
我在一个8 cpu, 16G内存的机器上跑了一个月的数据,跑了20个小时左右,感觉不是很理想,各位大侠,有没有什么好的优化方案,有什么经验可以共享么?
回复

使用道具 举报

千问 | 2016-1-7 20:57:31 | 显示全部楼层
1。把表结构及其上的约束等说明清楚
2。贴出你现在的处理过程。
回复

使用道具 举报

千问 | 2016-1-7 20:57:31 | 显示全部楼层
先将帐单细节表符合条件的数据或资产表符合条件的数据导出到一个临时表,哪个能得出最少的数据,就先做那个。
然后该临时表与另外一个表做关联。
你可以试试。我没条件,所以是瞎想。呵呵
回复

使用道具 举报

千问 | 2016-1-7 20:57:31 | 显示全部楼层
bill_item 每月3000万
(
bill_item_id, --序列号,主键
bill_date,--开帐日期
PROD_INST_ID, --资产号(Reference to 资产表
NET_AMT-- 开帐金额
)
还有一些无关紧要的字段我就不一一列出了
资产表prod_inst共有1亿左右
(
prod_inst_id, 资产ID
install_date, 安装日期
uninstall_date,拆装日期
pay_cust_id,付费客户代码
own_cust_id 产权客户代码
)
客户表cust
(
cust_id,客户ID
cust_name,客户名称
cust_begin_date,客户开始日期
cust_end_date,客户结束日期
indust_id,客户行业ID
addr_id 客户地址ID

我的处理流程
CURSOR IS
SELECT
bill_item_id, --序列号,主键
bill_date,--开帐日期
PROD_INST_ID, --资产号(Reference to 资产表
NET_AMT
from bill_item
where bill_date = 加工月份
procedure get_pi_info(.....根据输入的资产ID得到相关客户ID)
procedure get_cust_info(....根据输入客户ID得到相关客户信息)
Begin
打开Cursor
Loop
get_pi_info
get_cust_info
--处理流程必须要得到资产的安装日期和拆装日期
....
insert into temp table
end loop
end

要算出某些收入指标,必须通过资产表,但是资产表太大了,我的一大烦恼,我不知道是不是思维定势,有没有什么好的办法,也想不出对资产表分区的好办法,各位,你们有什么经验么?
回复

使用道具 举报

千问 | 2016-1-7 20:57:31 | 显示全部楼层
自己顶一把
回复

使用道具 举报

千问 | 2016-1-7 20:57:31 | 显示全部楼层
你现在的做法是在模拟nest loop的做法。

你的index设置情况如何?
回复

使用道具 举报

千问 | 2016-1-7 20:57:31 | 显示全部楼层
你可以先建立一个测试环境
比如说
30W的bill_item
100W的prod_inst
30W的cust
应该直接用join会比你自己处理要快。
回复

使用道具 举报

千问 | 2016-1-7 20:57:31 | 显示全部楼层
如果数据量是30w,100w的话,我肯定要SQL Join 了,但问题是现在是bill_item,资产表都太大,不得不这样处理啊,您说呢?
索引情况是bill_item的prod_inst_id有索引,资产表的prod_inst_id也有索引,cust表的cust_id有索引
回复

使用道具 举报

千问 | 2016-1-7 20:57:31 | 显示全部楼层
Up 一下,等待高手的建议,请帮帮忙
回复

使用道具 举报

千问 | 2016-1-7 20:57:31 | 显示全部楼层
表 bill_item总共有多大?
表 bill_item的 bill_date 列上没有没有索引?
建议 建立分区表
资产表prod_inst上建立组合索引,直接通过扫描索引就能得到相关客户ID
顺便说。我不是高手,抛专引玉
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行