【发布时间】:2019-09-03 20:58:47
【问题描述】:
我试图了解为什么我的查询在我的情况下具有巨大的性能差异。
我有这张表有列:时间戳、股票代码、开盘价、最高价、最低价、收盘价、交易量、交易所。 数据库是 Postgres 9.6。
该表大约有 3 亿行。
我已经建立了以下索引:
- 唯一索引(时间戳、代码、交换),
- (股票代码)索引,
- 索引(交换)。
我的查询如下
SELECT MAX(timestamp) FROM table WHERE ticker='ticker1' AND exchange='exchange1';
但是对于代码的不同值,我的查询时间差异很大,从 300 毫秒到 7 分钟不等。
我正在尝试了解导致此问题的原因以及是否可以通过任何方式改进它。
更多信息:
create table ohlcv (
timestamp bigint,
ticker varchar(20),
open double precision,
high double precision,
low double precision,
close double precision,
volume double precision,
exchange varchar(20),
constraint ohlcv_timestamp_ticker_exchange_key
unique (timestamp, ticker, exchange)
);
create index ohlcv_exchange_index on ohlcv (exchange);
create index ohlcv_ticker_index on ohlcv (ticker);
【问题讨论】:
-
请edit您的问题并添加使用
explain (analyze, buffers, format text)生成的execution plans(慢速和快速)(不只是一个“简单”的解释)作为formatted text,并确保您防止该计划的缩进。粘贴文本,然后将```放在计划前一行和计划后一行。还请包括所有索引的完整create index语句。
标签: postgresql indexing