查看: 3083|回复: 10

[性能调整] 一个select语句的优化问题,各位路过帮忙看看

[复制链接]
论坛徽章:
1
2010新春纪念徽章
日期:2010-03-01 11:08:24
发表于 2010-2-20 18:50 | 显示全部楼层 |阅读模式
我有一个业务明细的分区表,按照时间字段(tran_dt)分区,每个月一个分区,到目前为止已经有50个分区了,数据量倒不是很大,8000万左右. 业务上有个需求,每天都要取某个业务种类的数据,比如需要业务A的已结算但未作废的数据,语句是这样写的

select * from trans_dtl  where trans_type='A' and del_flag='0' and frozen_flag='0' and deal_flag='1' ;

这里用到的条件里的字段如type 及flag的取值都不多,一般只有几个选项,type多一点,也只不过10几个,
这个语句执行非常慢,大概运行完需要将近20分钟,而这样的业务取数还有很多,所以效率很低.

每个分区上都存在业务需要的数据,因为也可能对几年前的数据进行作废 和清算等操作,所以这个语句没有用时间字段,在这些条件字段上也没有建过任何索引.

我想请教各位,像我这种情况,从数据库这边来考虑,有没有什么好的方法进行改进? 想过是不是给这几个字段建个位图索引,但是我这个明细表insert update还是很频繁的,好像也不太合适.

请各位不吝赐教
谢谢
论坛徽章:
136
ITPUB年度最佳技术回答奖
日期:2010-06-12 13:17:14现代
日期:2013-10-02 14:53:59路虎
日期:2013-11-22 12:26:182014年新春福章
日期:2014-02-18 16:42:02马上有房
日期:2014-02-18 16:42:02马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上加薪
日期:2014-02-19 11:55:14
发表于 2010-2-20 18:59 | 显示全部楼层
这条语句每天返回多少结果,是否能修改应用逻辑,如果可以修改的话,我觉得是不是可以这样实现

因为历史数据的修改肯定是少数的,修改的历史数据的时候,记录下历史记录的pk(这个可以用trigger就能做到),
这样每天读取的数据就是当天的数据加上历史被修改的数据,历史数据根据pk再去取表的数据,语句大概可以改成这样

temp表示每天修改的历史记录的pk

select * from table where tran_dt>=trunc(sysdate) and ....
union all
select * from table where pk in (select pk from temp) and ....;

[ 本帖最后由 棉花糖ONE 于 2010-2-20 19:03 编辑 ]

使用道具 举报

回复
论坛徽章:
1
2010新春纪念徽章
日期:2010-03-01 11:08:24
 楼主| 发表于 2010-2-20 19:12 | 显示全部楼层

回复 #2 棉花糖ONE 的帖子

啊,这个我倒没有看过,返回应该不会很多.几千条吧.你这个做法我明白了,只是这样子的trigger对正常业务性能有没有什么大影响,平时对外还是比较忙的.

使用道具 举报

回复
论坛徽章:
136
ITPUB年度最佳技术回答奖
日期:2010-06-12 13:17:14现代
日期:2013-10-02 14:53:59路虎
日期:2013-11-22 12:26:182014年新春福章
日期:2014-02-18 16:42:02马上有房
日期:2014-02-18 16:42:02马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上加薪
日期:2014-02-19 11:55:14
发表于 2010-2-20 19:14 | 显示全部楼层

回复 #3 marchyc 的帖子

如果返回的结果只有很少,那么应该是有一个条件或者几个条件组合后过滤很强,建个索引收集下直方图应该就可以了

使用道具 举报

回复
论坛徽章:
136
ITPUB年度最佳技术回答奖
日期:2010-06-12 13:17:14现代
日期:2013-10-02 14:53:59路虎
日期:2013-11-22 12:26:182014年新春福章
日期:2014-02-18 16:42:02马上有房
日期:2014-02-18 16:42:02马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上加薪
日期:2014-02-19 11:55:14
发表于 2010-2-20 19:15 | 显示全部楼层

回复 #3 marchyc 的帖子

如果能修改程序就比较好了,因为你那些做废操作和反清算的操作应该不会是经常做的,做这些操作的程序里加个记录pk的语句就ok了,这样对性能几乎没有影响

[ 本帖最后由 棉花糖ONE 于 2010-2-20 19:17 编辑 ]

使用道具 举报

回复
论坛徽章:
1
2010新春纪念徽章
日期:2010-03-01 11:08:24
 楼主| 发表于 2010-2-20 19:20 | 显示全部楼层

回复 #4 棉花糖ONE 的帖子

你是指我直接在这几个枚举类型字段上建索引吗?就建一般的B树索引?

使用道具 举报

回复
论坛徽章:
136
ITPUB年度最佳技术回答奖
日期:2010-06-12 13:17:14现代
日期:2013-10-02 14:53:59路虎
日期:2013-11-22 12:26:182014年新春福章
日期:2014-02-18 16:42:02马上有房
日期:2014-02-18 16:42:02马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上加薪
日期:2014-02-19 11:55:14
发表于 2010-2-20 19:22 | 显示全部楼层

回复 #6 marchyc 的帖子

分析下什么字段起了主要过滤的,建个普通的Btree索引,收集直方图就可以了

使用道具 举报

回复
论坛徽章:
1
2010新春纪念徽章
日期:2010-03-01 11:08:24
 楼主| 发表于 2010-2-20 19:26 | 显示全部楼层

回复 #7 棉花糖ONE 的帖子

好,谢谢. 另外问下,我假如建索引,像我这个情况是分区索引还是全局索引比较合适

使用道具 举报

回复
论坛徽章:
32
奥运会纪念徽章:摔跤
日期:2012-08-23 11:03:05青年奥林匹克运动会-击剑
日期:2014-09-19 10:58:152014年世界杯参赛球队:巴西
日期:2014-07-07 12:19:232014年世界杯参赛球队: 瑞士
日期:2014-05-19 12:18:36马上有钱
日期:2014-04-08 12:12:232014年新春福章
日期:2014-04-04 14:20:47马上有钱
日期:2014-02-18 16:43:092014年新春福章
日期:2014-02-18 16:43:09红旗
日期:2014-02-14 15:15:55优秀写手
日期:2013-12-18 09:29:16
发表于 2010-2-20 20:04 | 显示全部楼层
我感觉,type 值上不要建立索引,我们这边也有你这样的情况,写sql的时候是直接把type值上的索引屏掉了,
可以考虑几个常用的查询字段联合做索引,
我觉得8000万的数据量不算大,看表的数据增长速度和常用业务查询吧,
我们这边的有个表月200w左右数据增长量,现在也差不多7000多w了,insert update 比较多,没有分区。

个人感觉,不晓得合不合你的情况。

使用道具 举报

回复
论坛徽章:
1
2010新春纪念徽章
日期:2010-03-01 11:08:24
 楼主| 发表于 2010-2-20 21:49 | 显示全部楼层

回复 #9 yellowlee 的帖子

嗯,多谢,回头我找个空闲点的时间试试加索引看看

使用道具 举报

回复

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

本版积分规则 发表回复

SACC2019中国系统架构师大会

【数字转型 架构演进】SACC2019中国系统架构师大会,7折限时优惠重磅来袭!
2019年10月31日~11月2日第11届中国系统架构师大会(SACC2019)将在北京隆重召开。四大主线并行的演讲模式,1个主会场、20个技术专场、超千人参与的会议规模,100+来自互联网、金融、制造业、电商等领域的嘉宾阵容,将为广大参会者提供一场最具价值的技术交流盛会。

限时七折期:2019年8月31日前


----------------------------------------

大会官网>>
TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 
京ICP备09055130号-4  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表