[英]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.