簡體   English   中英

Postgres 對索引列的簡單選擇太慢

[英]Postgres simple select on indexed column is too slow

我有一張像下面這樣的桌子。 我有一個復合主鍵。 我也為輔助鍵添加了索引。 當我運行簡單查詢時,性能有點慢。 例如

CREATE TABLE item_ka_preview_relation (
    item_id varchar(40) NOT NULL,
    item_type varchar(40) NOT NULL,
    ka_id varchar(40) NOT NULL,
    sequence_number int4 NULL,
    creation_date timestamp NOT NULL,
    last_modified_date timestamp NOT NULL,
    pp_association_by_rule bool NULL DEFAULT false,
    CONSTRAINT item_ka_relation_preview_pkey PRIMARY KEY (item_id,ka_id),
    CONSTRAINT item_ka_relation_preview_item_type_fkey FOREIGN KEY (item_type) REFERENCES item_type(id)
);
CREATE INDEX idx_itemkarelation_preview_itemtype ON item_ka_preview_relation (item_type DESC) ;
CREATE INDEX idx_itemkarelation_preview_kaid ON item_ka_preview_relation (ka_id DESC) ;

該表有 100 萬行。 下面的查詢獲取了一些 80k 行。

explain analyze
select * from item_ka_preview_relation ik where ik.ka_id in ('3800042','69104128','2300023','3800019','5400264','3800039')

分析是這樣的

Bitmap Heap Scan on item_ka_preview_relation ik  (cost=5867.27..20251.85 rows=255062 width=54) (actual time=23.029..115.286 rows=250064 loops=1)
  Recheck Cond: ((ka_id)::text = ANY ('{3800042,69104128,2300023,3800019,5400264,3800039}'::text[]))
  Heap Blocks: exact=8490
  ->  Bitmap Index Scan on idx_itemkarelation_preview_kaid  (cost=0.00..5803.50 rows=255062 width=0) (actual time=21.741..21.742 rows=250064 loops=1)
        Index Cond: ((ka_id)::text = ANY ('{3800042,69104128,2300023,3800019,5400264,3800039}'::text[]))
Planning time: 0.328 ms
Execution time: 160.677 ms

雖然我已經索引了 ka_id 列,但查詢仍然使用位圖堆掃描並且響應很慢

任何改善這一點的想法。 我正在使用 postgres 9.6.1

位圖索引掃描實際上使查詢更快 選擇它是因為有很多結果行。

您可以通過將enable_seqscanenable_bitmapscan設置為off並檢查是否可以提高執行時間來進行測試。

如果是的話,也許你應該調整effective_cache_size更高和/或random_page_cost降低,使之與實際硬件相匹配。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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