私はこのテーブルにインデックスを持っていると仮定します。PostgreSQLインデックス実行時
Create Table sample
(
table_date timestamp without timezone,
description
);
CREATE INDEX dailyinv_index
ON sample
USING btree
(date(table_date));
そして、3300万行があります。
なぜそれがこのクエリに
select count(*) from sample where date(table_date) = '8/30/2017' and desc = 'desc1'
を実行すると、クエリプランを説明するためのPostgreSQLを使用した12msの
@結果が得られることです。これはそうです。
Aggregate (cost=288678.55..288678.56 rows=1 width=0)
->Bitmap Heap Scan on sample (cost=3119.63..288647.57 rows=12393 width=0)
Recheck Cond: (date(table_date) = '2017-08-30'::date)
Filter: ((description)::text = 'desc1'::text)
-> Bitmap Index Scan on dailyinv_index (cost=0.00..3116.54 rows=168529 width=0)
Index Cond: (date(table_date) = '2017-08-30'::date)
が、この1
select date(table_date) from sample where date(table_date)<='8/30/2017' order by table_date desc limit 1
11460ミリ秒後の結果得?
クエリプラン
Limit (cost=798243.52..798243.52 rows=1 width=8)
-> Sort (cost=798243.52..826331.69 rows=11235271 width=8)
Sort Key: table_date
-> Bitmap Heap Scan on sample (cost=210305.92..742067.16 rows=11235271 width=8)
Recheck Cond: (date(table_date) <= '2017-08-30'::date)
-> Bitmap Index Scan on dailyinv_index (cost=0.00..207497.10 rows=11235271 width=0)
Index Cond: (date(table_date) <= '2017-08-30'::date)
PostgreSQLのバージョン:9.4
はたぶんイムが間違ってインデックス付けを行っているか、私は知りません。インデックス作成に慣れていないどんな助けも素晴らしいだろう。どうもありがとう!
下記を参照してください。https://stackoverflow.com/tags/postgresql-performance/infoまた、あなたのインデックスは別のテーブルにあります。 –
申し訳ありません。私は実際のテーブルをコピーして編集しました。 – Bigboss
まだ間違った列です。また、分析結果を含めるようにしてください。 –