[英]Fastest way to select row with max value at primary key field
我有一张桌子:
CREATE TABLE spots(
datetime TIMESTAMP,
market VARCHAR(15),
spot NUMERIC(10, 5),
PRIMARY KEY (market, datetime)
);
我需要选择一行p_market
与最大值datetime
,该申请是小于或等于p_datetime
,所以我有两个选择采用这样的:
SELECT * FROM spots WHERE market = p_market AND datetime = (
SELECT MAX(datetime) FROM spots WHERE market = p_market AND datetime <= p_datetime
);
和
SELECT * FROM spots WHERE market = p_market AND datetime <= p_datetime
ORDER BY datetime DESCENDING LIMIT 1;
因此,问题是-从性能角度来看哪个变体更好。
Postgres支持window函数 ,从理论上讲,应该在处理行时以递增方式计算它,因此它应该在大型数据集上提供一些性能提升:
SELECT *
FROM (SELECT *,
RANK() OVER (ORDER BY datetime DESC) AS rk
FROM spots
WHERE market = p_market AND datetime <= p_datetime) t
FROM spots
WHERE rk = 1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.