如果我需要在postgresql中找到存储为数字(即可变长度数字(的几个字段的最大长度,这样我的团队就可以构建一个固定宽度的文件布局,而长度不在元数据中,有没有比更快的方法来获取信息
select field
from table
where field is not null
order by field desc
limit 1;
或
select max(field)
from table;
这些字段所在的表有数千万行,因此这些查询需要相当长的时间。我是一个不错的postgresql用户,但优化效率从来都不是我的强项——我通常不处理这么大的数据集。任何帮助都将不胜感激,即使这是一个愚蠢的问题!
您的查询看起来不错。第一个查询中不需要where
子句,可以写成:
select myfield from mytable order by myfield desc nulls last limit 1;
然后,对于性能,请考虑以下指标:
create index myidx on mytable(myfield desc nulls last);
实际上,Postgres应该能够向后读取索引,所以这应该同样好:
create index myidx on mytable(myfield);
有了这些索引中的任何一个,数据库应该能够通过只查看索引来执行整个查询,这应该非常高效。