【发布时间】:2017-02-02 18:42:00
【问题描述】:
我正在尝试优化这个查询:
EXPLAIN ANALYZE
select
dtt.matching_protein_seq_ids
from detected_transcript_translation dtt
join peptide_spectrum_match psm
on psm.detected_transcript_translation_id =
dtt.detected_transcript_translation_id
join peptide_spectrum_match_sequence psms
on psm.peptide_spectrum_match_sequence_id =
psms.peptide_spectrum_match_sequence_id
WHERE
dtt.matching_protein_seq_ids && ARRAY[654819, 294711]
;
当允许 seq_scan 时(设置 enable_seqscan = on),优化器会选择一个非常糟糕的计划,在 49.85 秒内运行:
https://explain.depesz.com/s/WKbew
使用 set enable_seqscan = off,选择的计划使用适当的索引并且查询会立即运行。
https://explain.depesz.com/s/ISHV
请注意,我确实对所有三个表都运行了 ANALYZE...
【问题讨论】:
标签: postgresql