1
优化大型数据库查询(25+百万行,使用max()和GROUP BY)
我使用的是Postgres 9.3.5,并且数据库中有一个大表,目前它有2500万行,而且它往往会迅速增大。我正在尝试通过一个简单的查询来选择特定的行(所有行都unit_id只有最新的行unit_timestamp),例如: SELECT unit_id, max(unit_timestamp) AS latest_timestamp FROM all_units GROUP BY unit_id; 没有任何索引,此查询大约需要35秒才能执行。使用定义的索引(CREATE INDEX partial_idx ON all_units (unit_id, unit_timestamp DESC);),查询时间缩短到(仅)19秒左右。 我想知道是否有可能在更短的时间内(例如几秒钟)执行我的查询,如果可以,我应该采取什么步骤来进一步优化它? 我的表结构转储如下所示: CREATE TABLE "all_units" ( "unit_id" int4 NOT NULL, "unit_timestamp" timestamp(6) NOT NULL, "lon" float4, "lat" float4, "speed" float4, "status" varchar(255) COLLATE "default" ) ALTER TABLE "all_units" ADD PRIMARY …