首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >压缩数据库中的列数量是否有益?

压缩数据库中的列数量是否有益?
EN

Stack Overflow用户
提问于 2015-11-20 23:06:50
回答 2查看 50关注 0票数 1

假设你想为每一部电影记录三个数字.比方说,:release_year:box_office:budget

按照惯例,使用Rails,您只需将这三个属性添加到Movie模型中,只需调用@movie.release_year@movie.box_office@movie.budget

它是否会节省任何数据库空间或提供任何其他好处,将所有三个数字压缩成一个伞列?

因此,当将这三个数字相加时,会出现这样的情况:

代码语言:javascript
复制
def update
  ...
  @movie.umbrella = params[:movie_release_year] 
    + "," + params[:movie_box_office] + "," + params[:movie_budget]
end

因此,最终的@movie.umbrella值将是“2015617293,748273”。

然后在控制器中,要访问这三个值,应该是这样的

代码语言:javascript
复制
@umbrella_array = @movie.umbrella.strip.split(',').map(&:strip)
@release_year = @umbrella_array.first
@box_office = @umbrella_array.second
@budget = @umbrella_array.third

这样,它将是相同数量的数据(实际上更多一点,加上额外的逗号),但只存储在一列。这会比三栏更好吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-11-20 23:23:02

在一列中压缩这些属性没有好处。实际上,遵循这条路径将增加代码的复杂性,并将限制您的功能。

以下是您可能面临的一些问题:

  1. 您将无法添加索引以提高使用特定属性值查找记录的性能,也无法对筛选进行排序。
  2. 您将无法查询特定属性值。
  3. 您将无法按特定的列值进行排序。
  4. 这些值将被存储并表示为字符串,而不是整数。

..。我可以继续。没有好处,只有缺点。

票数 4
EN

Stack Overflow用户

发布于 2015-11-20 23:27:41

同意上面的评论,作为一个例子,尝试使用pg_column_size()来比较结果:

代码语言:javascript
复制
WITH test(data_txt,data_int,data_date) AS ( VALUES
  ('9999'::TEXT,9999::INTEGER,'2015-01-01'::DATE),
  ('99999999'::TEXT,99999999::INTEGER,'2015-02-02'::DATE),
  ('2015-02-02'::TEXT,99999999::INTEGER,'2015-02-02'::DATE)
) 
SELECT pg_column_size(data_txt) AS txt_size,
         pg_column_size(data_int) AS int_size,
         pg_column_size(data_date) AS date_size
FROM test;

结果是:

代码语言:javascript
复制
 txt_size | int_size | date_size 
----------+----------+-----------
        5 |        4 |         4
        9 |        4 |         4
       11 |        4 |         4
(3 rows)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33837548

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档