簡體   English   中英

在主鍵字段中選擇具有最大值的行的最快方法

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM