我正在使用PostgreSQL数据库创建一个Ruby on Rails项目
我有一个表test_runs
,我想向其添加一列,该列表示以秒为单位的持续时间。我不确定小数点前面会有多少个数字,但我还没有看到超过 3 或 4 的数字。
这就是我在想的:
create_table :test_runs, primary_key: :run_id do |t|
t.decimal :duration, precision: 15, scale: 6
t.timestamps
end
- 这是存储需要六个小数点精度的时间的最有效方法吗?
- 我应该给这个专栏起什么名字?我在想
duration
或duration_seconds
您可能会提前将数据以微秒为单位存储为整数。每个值只需要 4 个(或 bigint 的 8 个(字节。 十进制需要更多。
数值以物理方式存储,没有任何额外的前导或尾随零。因此,列的声明精度和小数位数是最大值,而不是固定分配。(从这个意义上说,数值类型更类似于 varchar(n( 而不是 char(n(。实际存储要求是每组四个十进制数字的两个字节,加上三到八个字节的开销。
此外,SQL 运算/数学在纯整数上更快。