Postgres慢查询加入第一条记录

问题描述 投票:1回答:1

我有这个问题:

    SELECT
      mt.market_coin_id AS coin_id,
      mt.quantity AS quantity,
      (ha.price_eur * mt.quantity) as test
    FROM
      market_transactions mt
    JOIN historical_data ha ON ha.id = (SELECT id FROM historical_data WHERE historical_data.coin_id = mt.market_coin_id ORDER BY mt.trade_at <-> snapshot_on LIMIT 1)
    WHERE
      mt.user_id = 1

我想要做的是通过加入与交易日期test匹配的第一次记录historical_data.snapshot_on的历史定价表,即时计算价格(mt.trade_at

但是查询似乎很慢。

假设所有内容都被编入索引,是否有一种正确的方法可以使查询更快一些?

historical_data

ID    | COIN_ID | SNAPSHOT_ON | PRICE_USD | PRICE_EUR | 
------|---------|-------------|-----------|-----------|
42794 | 422     | 2017-07-31  | 0.0001353 | 0.0001152 | 
42795 | 422     | 2017-08-01  | 0.0001144 | 0.0000968 | 

market_transactions

ID  | USER_ID | MARKET_COIN_ID | QUANTITY       | TRADE_AT
----|---------|----------------|----------------|------------------------
347 | 1       | 422            | 1463.36263314  | 2017-09-01 13:55:57
sql postgresql
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.