【发布时间】:2020-11-19 01:06:11
【问题描述】:
如果我需要在 postgresql 中找到存储为数字(即可变长度数字)的几个字段的最大长度,以便我的团队可以构建固定宽度的文件布局并且长度不在元数据中,是否有更快的获取该信息的方法比任何一个都好
select field
from table
where field is not null
order by field desc
limit 1;
或
select max(field)
from table;
?
这些字段所在的表有数千万行,因此这些查询需要相当长的时间。我是一个不错的 postgresql 用户,但优化效率从来都不是我的强项——我通常不使用如此大的数据集。任何帮助表示赞赏,即使这是一个愚蠢的问题!
【问题讨论】:
-
您应该检查两个查询的执行计划,您甚至可能会发现它们是相同的。第二个版本是您可能会在生产系统中使用的版本。
-
为什么一定要快?如果只有个NULL值会发生什么?
-
为什么不直接分配 10 位数字给一个整数。这已经足够了。我不确定在文件中保存几个字节是否值得。
-
此时更多的是时间限制问题 - 这些是帮助填充固定宽度文件布局的临时查询,并且根据表中的行数,一些查询正在执行30+分钟。我们希望在接下来的一两天内改变文件布局。
-
@GordonLinoff 不幸的是,我们在固定宽度文件上有一个最大字节宽度。
标签: sql postgresql performance query-optimization