【问题标题】:Oracle DB Table Size By per year record countOracle DB 表大小按每年记录数计算
【发布时间】:2014-08-30 06:39:09
【问题描述】:

我可以使用以下命令获取数据库表的总大小:

EXEC SQL.

   SELECT SUM(BYTES) / 1024 FROM DBA_SEGMENTS WHERE OWNER = :dbown AND
                                             SEGMENT_TYPE = 'TABLE' AND
                                             SEGMENT_NAME = :TABNAME
                                             INTO :TABSIZE

ENDEXEC

.

但我想通过每年的记录数来计算数据库表的大小。我怎样才能做到这一点

问候,

普拉迪普

【问题讨论】:

  • “按年记录计数”是什么意思?您的表是否有一个 date 列,指示您希望将它包含在哪一年?您需要多准确的结果?你想如何分配开销?例如,您能否假设每年数据的平均行大小相等?
  • 表有日期列,据此我可以有每年的记录数。
  • 好的。其他问题呢?你能假设一行的大小随着时间的推移是恒定的吗?您想如何分配开销?

标签: sql oracle


【解决方案1】:

我能想到的最简单的技巧是创建一个空的重复表,插入一行,检索单行的字节。由于您的行具有与您输入的内容无关的指定长度,因此每行的字节大小应该是一切都一样。

那么您所要做的就是了解每年向表中插入多少行。您通常会使用例如

SELECT to_char(a.insert_date, 'yyyy')      YEAR, 
       sum(to_char(a.insert_date, 'yyyy')) ENTRIES
FROM   yourTable a 
GROUP BY to_char(a.insert_date, 'yyyy')

还是我把你的问题弄错了。

【讨论】:

    【解决方案2】:

    这不是一门精确的科学。考虑到多年来该表可能已添加/修改了列。所以,考虑到这个警告,我会快速做你想做的事情的方式是查询 dba_Segment 就像你已经做的那样来获取总大小,然后在表上编写一个查询以按年份返回行数,然后将总大小拆分为按比例计算的年度行数。

    【讨论】:

      猜你喜欢
      • 2015-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-16
      • 1970-01-01
      • 2022-01-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多