表的数据量很大,怎么处理?

holdup20080808 2012-03-16 04:01:44
1、表结构有3个字段:ID,DATETIME, VALUE
2、每天会产生500万条记录,因此按天进行分表,表名TABLE_YYYYMMDD,也就是每天产生一个表来存储当天的数据。

一年后产生了365个表,我想对整年记录的VALUE值进行排序,取排序后的记录中的任意一段连续的100条记录怎么查呢,是不是分表有问题?效率如何保证?求解!
...全文
483 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
holdup20080808 2012-03-20
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 wangjn1982 的回复:]

分区字段可以是VALUE,这样的话全年的记录会按照VALUE的值插入到不同的分区,然后在分区内排序
[/Quote]
因为用户也会选择某时间段(如跨几个季度)进行排序查询,此时如果纯粹按照VALUE进行分区的话还是会跨越几个分区进行排序查询的
wangjn1982 2012-03-20
  • 打赏
  • 举报
回复
分区字段可以是VALUE,这样的话全年的记录会按照VALUE的值插入到不同的分区,然后在分区内排序
holdup20080808 2012-03-20
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 cxw3152 的回复:]

按照数量分区
[/Quote]
还是那个问题,我分区后和分区前对全部数据(包括所有分区的数据)进行排序查询,性能有多大的提升?
cxw3152 2012-03-19
  • 打赏
  • 举报
回复
按照数量分区
soft_2012 2012-03-19
  • 打赏
  • 举报
回复
额。这个就不好说了。飘飘
holdup20080808 2012-03-19
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 bin3509 的回复:]

建了分区字段后!假如你是分4个季度分区,可以where 分区字段 between 季度1 and 季度4
[/Quote]
有做过测试吗,这样性能能提高多少?因为我理解最终oracle还是要从4个分区中拿到所有数据进行排序(或许4个分区放在不同的物理机上可以减轻磁盘的IO压力吧,但是这样不会不会同时增加了网络IO的压力呢),如果只是对其中某分区查询是会提高速度,因为实际上相当是单表数据量变少了。
ICE-word 2012-03-19
  • 打赏
  • 举报
回复
建了分区字段后!假如你是分4个季度分区,可以where 分区字段 between 季度1 and 季度4
holdup20080808 2012-03-19
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 stone_zhao 的回复:]

引用 15 楼 huaqin 的回复:
引用 13 楼 stone_zhao 的回复:

在检索前收集统计情报也可以大幅提高性能。
SQL code

DBMS_STATS.GATHER_TABLE_STATS(
OWNNAME => 'schema'
,TABNAME => 'table_name'
,METHOD_OPT => 'FOR ALL INDEXED'
,CAS……
[/Quote]
我试试
holdup20080808 2012-03-19
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 bin3509 的回复:]

对呀!建时间分区。。然后根据你要查询的数据,根据时间点查询,那样会快非常多!!。
[/Quote]
问题就在这里,查询条件是可以选的,时间部分用户选的是全年的排序数据,但因为数据量大我按照月进行了分区,我整年的查能快吗?
stone_zhao 2012-03-19
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 huaqin 的回复:]
引用 13 楼 stone_zhao 的回复:

在检索前收集统计情报也可以大幅提高性能。
SQL code

DBMS_STATS.GATHER_TABLE_STATS(
OWNNAME => 'schema'
,TABNAME => 'table_name'
,METHOD_OPT => 'FOR ALL INDEXED'
,CASCADE……

什么意思,能说详细点吗?……
[/Quote]
简单说就是让oracle知道表里有什么样的数据(统计情报),这样在检索时可以加快速度。
你把上面的语句中的schema名和表名换成你的,执行就可以了。
ICE-word 2012-03-19
  • 打赏
  • 举报
回复
对呀!建时间分区。。然后根据你要查询的数据,根据时间点查询,那样会快非常多!!。
holdup20080808 2012-03-19
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 stone_zhao 的回复:]

在检索前收集统计情报也可以大幅提高性能。
SQL code

DBMS_STATS.GATHER_TABLE_STATS(
OWNNAME => 'schema'
,TABNAME => 'table_name'
,METHOD_OPT => 'FOR ALL INDEXED'
,CASCADE……
[/Quote]
什么意思,能说详细点吗?没看明白
holdup20080808 2012-03-19
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 bin3509 的回复:]

我这边说的时间分区只是让你查询一些数据速度变快!至于你数据的存储转移,根据分区来转的话!也会快很多,
[/Quote]
不涉及到存储转移,就是只考虑查询速度能提升快多少,因为现在要求基本都是1秒内查询完成。
stone_zhao 2012-03-19
  • 打赏
  • 举报
回复
在检索前收集统计情报也可以大幅提高性能。

DBMS_STATS.GATHER_TABLE_STATS(
OWNNAME => 'schema'
,TABNAME => 'table_name'
,METHOD_OPT => 'FOR ALL INDEXED'
,CASCADE => FALSE
);

DBMS_STATS.GATHER_INDEX_STATS(
OWNNAME => 'schema',
INDNAME => 'index_name'
);
stone_zhao 2012-03-19
  • 打赏
  • 举报
回复
做个物化视图吧。
ICE-word 2012-03-19
  • 打赏
  • 举报
回复
我这边说的时间分区只是让你查询一些数据速度变快!至于你数据的存储转移,根据分区来转的话!也会快很多,
断剑1989 2012-03-19
  • 打赏
  • 举报
回复
关注下,这个问题还是有点意思的,望大侠出现。
holdup20080808 2012-03-19
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 lxyzxq2008 的回复:]

引用 3 楼 huaqin 的回复:

引用 2 楼 bin3509 的回复:

弄个时间分区

分区后对365个表进行联合查询速度能提升多少?
分区了,就没必要联合查询了啊?
需要那段就查那个分区,不需要在意其他的分区,这样你的速度就快多了啊
[/Quote
我没有用过分区,你的意思是分区后就不需要分表了是吗?比如如果不分表一年后一个表的数据就有72亿条记录,一个72亿行记录的表在分区的情况下,我要按某字段的值进行排序然后取某期间的值能保证效率吗?注意的是这里涉及到排序,记录的值可能是零散的分布在不同的分区里的。
飃颻 2012-03-16
  • 打赏
  • 举报
回复
合併不易出錯,問題是量放得太大,不容易把握。
用文本文件處理大約是GB數量級。
moray126 2012-03-16
  • 打赏
  • 举报
回复
不适合用关系数据库
加载更多回复(6)

17,090

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧