查看: 7895|回复: 19

[性能调整] 分区表大数据量读取优化

[复制链接]
kellywu_99 该用户已被删除
发表于 2010-3-4 15:48 | 显示全部楼层 |阅读模式
Hi,各位:

现有一张车辆记录表T_CLJL,数据量约1亿3千万条,含有JLBH(记录编号,主键)BY1(站点编号),CPHM(车牌号码),DDSJ(到达时间),CDH(车道号)等字段,已将其按月份为维度存于分区表,存于表空间A中;另建三个独立索引: index  IDEXBY1 on T_CLJL (BY1) ,index IDEXCPHM on T_CLJL (CPHM) ,index IDEXDDSJ on T_CLJL (DDSJ)  于表空间B中。

查询语句及执行情况如下:
  1. SQL> select  /*+ index_join (T_CLJL  IDEXBY1 IDEXDDSJ) */ BY1,CPHM,DDSJ,JLBH,XSFX,TPLJ,CDH,CBZ
  2.   2  from t_cljl
  3.   3  where by1 = '1018' and ddsj between to_date('2008-08-26 0:00:00','yyyy-mm-dd hh24:mi:ss') and t
  4. o_date('2008-09-06 0:00:00','yyyy-mm-dd hh24:mi:ss');
  5. 已选择337087行。

  6. 执行计划
  7. ----------------------------------------------------------
  8. Plan hash value: 2924524895
  9. ---------------------------------------------------------------------------------------------------------------
  10. | Id  | Operation                          | Name     | Rows  | Bytes | Cost (%CPU)| Time     | Pstart| Pstop |
  11. ---------------------------------------------------------------------------------------------------------------
  12. |   0 | SELECT STATEMENT                   |          |  4694 |   307K| 69673(1)| 00:13:57 |       |       |
  13. |*  1 |  TABLE ACCESS BY GLOBAL INDEX ROWID| T_CLJL   |  4694 |   307K| 69673(1)| 00:13:57 | ROWID | ROWID |
  14. |*  2 |   INDEX RANGE SCAN                 | IDEXDDSJ |   117K|       |   383(1)| 00:00:05 |       |       |
  15. ---------------------------------------------------------------------------------------------------------------

  16. Predicate Information (identified by operation id):
  17. ---------------------------------------------------
  18.    1 - filter("BY1"='1018')
  19.    2 - access("DDSJ">=TO_DATE(' 2008-08-26 00:00:00', 'syyyy-mm-dd hh24:mi:ss')
  20. AND "DDSJ"<=TO_DATE('2008-09-06 00:00:00', 'syyyy-mm-dd hh24:mi:ss'))
  21. 统计信息
  22. ----------------------------------------------------------
  23.         413  recursive calls
  24.           0  db block gets
  25.     4815955  consistent gets
  26.      151782  physical reads
  27.           0  redo size
  28.    28775324  bytes sent via SQL*Net to client
  29.      247608  bytes received via SQL*Net from client
  30.       22474  SQL*Net roundtrips to/from client
  31.           3  sorts (memory)
  32.           0  sorts (disk)
  33.      337087  rows processed
复制代码


请问:1.有没有更好的方法?查询时间有点长。
2. 执行计划中 “TABLE ACCESS BY GLOBAL INDEX ROWID”主要是指查询中哪一步骤?
3。比较白痴:是通过时间条件找到分区表?还是直接找到分区表然后在分区表内通过时间条件进行查找?


Regards,
Kelly

[ 本帖最后由 kellywu_99 于 2010-3-4 15:53 编辑 ]
认证徽章
论坛徽章:
9
ITPUB社区OCM联盟徽章
日期:2013-03-27 11:17:11奥运纪念徽章
日期:2013-06-18 09:13:52ITPUB社区千里马徽章
日期:2013-08-22 09:58:03大众
日期:2013-08-30 14:51:33路虎
日期:2013-12-01 18:25:42
发表于 2010-3-4 16:08 | 显示全部楼层
TABLE ACCESS BY GLOBAL INDEX ROWID
主要是指的是重ROWID 方位到表中的数据

使用道具 举报

回复
认证徽章
论坛徽章:
9
ITPUB社区OCM联盟徽章
日期:2013-03-27 11:17:11奥运纪念徽章
日期:2013-06-18 09:13:52ITPUB社区千里马徽章
日期:2013-08-22 09:58:03大众
日期:2013-08-30 14:51:33路虎
日期:2013-12-01 18:25:42
发表于 2010-3-4 16:12 | 显示全部楼层
如果这里GLOBAL 变为LOCAL 就好了,,效率会高一些

使用道具 举报

回复
论坛徽章:
8
2010新春纪念徽章
日期:2010-03-01 11:08:26ITPUB9周年纪念徽章
日期:2010-10-08 09:32:272011新春纪念徽章
日期:2011-02-18 11:43:33奥运会纪念徽章:棒球
日期:2012-07-03 15:20:13奥运会纪念徽章:摔跤
日期:2012-07-22 21:22:28ITPUB 11周年纪念徽章
日期:2012-10-09 18:14:48紫蛋头
日期:2013-02-20 09:40:232013年新春福章
日期:2013-02-25 14:51:24
发表于 2010-3-4 16:27 | 显示全部楼层
index_join只用于select的所有column list都出现在index中

如果可以的话,在by1, ddsj列建一个全局索引

使用道具 举报

回复
论坛徽章:
311
行业板块每日发贴之星
日期:2012-07-12 18:47:29双黄蛋
日期:2011-08-12 17:31:04咸鸭蛋
日期:2011-08-18 15:13:51迷宫蛋
日期:2011-08-18 16:58:25紫蛋头
日期:2011-08-31 10:57:28ITPUB十周年纪念徽章
日期:2011-09-27 16:30:47蜘蛛蛋
日期:2011-10-20 15:51:25迷宫蛋
日期:2011-10-29 11:12:59ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41鲜花蛋
日期:2011-11-09 20:33:30
发表于 2010-3-4 23:47 | 显示全部楼层
可以考虑先按照站点编号建列表分区,再按日期作范围分区.

使用道具 举报

回复
招聘 : Java研发
认证徽章
论坛徽章:
71
马上加薪
日期:2014-02-19 11:55:14蜘蛛蛋
日期:2012-12-26 18:16:01茶鸡蛋
日期:2012-11-16 08:12:48ITPUB 11周年纪念徽章
日期:2012-10-09 18:05:07奥运会纪念徽章:网球
日期:2012-08-23 14:58:08奥运会纪念徽章:沙滩排球
日期:2012-07-19 17:28:14版主2段
日期:2012-07-07 02:21:02咸鸭蛋
日期:2012-03-23 18:17:482012新春纪念徽章
日期:2012-02-13 15:13:512012新春纪念徽章
日期:2012-02-13 15:13:51
发表于 2010-3-5 09:12 | 显示全部楼层
distinct  by1 数量以及分区表目前的数量是多少个?
目前采用的执行计划,分区完全没用上,还有副作用

[ 本帖最后由 anlinew 于 2010-3-5 09:14 编辑 ]

使用道具 举报

回复
认证徽章
论坛徽章:
131
2006年度最佳技术回答
日期:2007-01-24 12:58:48福特
日期:2013-10-24 13:57:422014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11马上有车
日期: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:142013年新春福章
日期:2013-02-25 14:51:24
发表于 2010-3-5 10:09 | 显示全部楼层
从执行计划来看
改为LOCAL会很大很大的提高性能~
原帖由 gaopengtttt 于 2010-3-4 16:12 发表
如果这里GLOBAL 变为LOCAL 就好了,,效率会高一些

使用道具 举报

回复
认证徽章
论坛徽章:
5
生肖徽章2007版:猴
日期:2009-11-17 16:39:512010年世界杯参赛球队:希腊
日期:2010-01-06 14:10:122010新春纪念徽章
日期:2010-03-01 11:08:282010广州亚运会纪念徽章:羽毛球
日期:2010-11-29 10:28:31摩羯座
日期:2016-04-25 15:59:44
发表于 2010-3-5 10:10 | 显示全部楼层
你分区的分区键是DDSJ 这个字段吗?
没有用到分区

使用道具 举报

回复
论坛徽章:
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-3-5 10:25 | 显示全部楼层
目前走的是时间索引,而且你都按月分区了,查一个月数据,走时间索引一点意义没有,by1可以考虑建成local索引

使用道具 举报

回复
论坛徽章:
5
会员2007贡献徽章
日期:2007-09-26 18:42:10奥运会纪念徽章:水球
日期:2008-10-24 13:17:39生肖徽章2007版:蛇
日期:2009-11-13 10:54:51ITPUB学员
日期:2009-11-30 11:23:13ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15
发表于 2010-3-5 10:27 | 显示全部楼层
IDEXDDSJ
idexby

都改成local index,从时间计划来看,他的时间列上也是建立的全局index

使用道具 举报

回复

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

本版积分规则 发表回复

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