oracle大数据量的表设计

不倒的土豆 2015-12-04 03:59:25
现在公司有一个项目,需要设计一张表(oracle数据库)。
表中的数据存放的是时间和与此时间对应的值,这些值大概有300种,即如果设计成一个表,那这个表就要有300列。而且,存放的频率也比较高,每1秒要存1次,一般是连续工作30天。这样算来一个月就要800w的数据量了。
另外,在工作工程中,我还有频繁的查询数据库,回放显示数据库中的数据。

那么问题来了。我有两个方案:1、设计一张表,300列来存放数据。2、设计10张表,每张表30列数据。
这两种方案哪个比较好呢?
本人接触oracle不久,请各位大神指教。
...全文
854 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
jdsnhan 2015-12-09
  • 打赏
  • 举报
回复
1、你拆分成10个30列的表,10个表之间在后续查询的时候有多大的关联关系。关联不紧密,甚至极致不关联,拆卡也罢 2、数据量增大后,查询会变慢的,还要看每次查询出来的数据量。条件设置好了,8000万中查10条数据不显慢,要每次都查出1w条数据来,想快也快不了哪去
lnshshsh 2015-12-08
  • 打赏
  • 举报
回复
select 的列数比较固定,同时where限制比较少,那就可以根据情况拆分成几个表,固定需要查询的一组字段放入一张表,然后再加入一些公共的字段,做纵向拆分,表结构不同,一般是按功能拆分; select 列数随机性强,where条件限定条件比较固定,可以按限定条件拆分表,(比如按时间分表,某一年数据归入一张表),做横向折分,表结构相同(每一张表都是300个字段),是数据拆分。
不倒的土豆 2015-12-07
  • 打赏
  • 举报
回复
引用 2 楼 zbdzjx 的回复:
具体情况具体分析。 如果多数情况下select的就那么几列,纵向拆分。 如果多数情况下where后面的时间段比较固定,那就横向拆分。
查询语句不会太复杂,我觉得最多也就查询10列。查询所有列,这种频率很低。 您能详细说一下纵向拆分和横向拆分吗?网上的资料比较模糊
卖水果的net 2015-12-07
  • 打赏
  • 举报
回复
就会发现,某些表的字段不够用了,还要不断的去增加字段,最后增加到 100 个字段,也是有可能的 针对你拆成的那些小表,现在是每张表 30 列,在业务发生变化时,这些小表的列数会有所增加,最终有可能非常接近方案1 中的表的大小 。 8000w的,插入和查询速度会不会大幅降低呢? 这个会的。
不倒的土豆 2015-12-07
  • 打赏
  • 举报
回复
引用 1 楼 wmxcn2000 的回复:
首选方案1。 单的表操作比较简单,800W的数据是有些规模,但是还没有到可怕的程度,只是不知道你要保留多长时间。 如果采用方案2,拆分成 10 个小表,你在实际运行过程中,就会发现,某些表的字段不够用了,还要不断的去增加字段,最后增加到 100 个字段,也是有可能的。 先说这些,有时间再补充。
800w条是一个月的,以后每个月都会累积的,使用一年的话就会达到8000w的,插入和查询速度会不会大幅降低呢? 还有“就会发现,某些表的字段不够用了,还要不断的去增加字段,最后增加到 100 个字段,也是有可能的”,这句话不太明白,我的总字段应该不会超过300个的
不倒的土豆 2015-12-07
  • 打赏
  • 举报
回复
自顶,自顶,来人啊
zbdzjx 2015-12-04
  • 打赏
  • 举报
回复
具体情况具体分析。 如果多数情况下select的就那么几列,纵向拆分。 如果多数情况下where后面的时间段比较固定,那就横向拆分。
卖水果的net 2015-12-04
  • 打赏
  • 举报
回复
首选方案1。 单的表操作比较简单,800W的数据是有些规模,但是还没有到可怕的程度,只是不知道你要保留多长时间。 如果采用方案2,拆分成 10 个小表,你在实际运行过程中,就会发现,某些表的字段不够用了,还要不断的去增加字段,最后增加到 100 个字段,也是有可能的。 先说这些,有时间再补充。

17,086

社区成员

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

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