Есть много вопросов по этой теме, но все они, кажется, более сложные случаи, чем то, на что я смотрю в данный момент, и ответы не кажутся применимыми.postgres не использует индекс
OHDSI=> \d record_counts
Table "results2.record_counts"
Column | Type | Modifiers
------------------------+-----------------------+-----------
concept_id | integer |
schema | text |
table_name | text |
column_name | text |
column_type | text |
descendant_concept_ids | bigint |
rc | numeric |
drc | numeric |
domain_id | character varying(20) |
vocabulary_id | character varying(20) |
concept_class_id | character varying(20) |
standard_concept | character varying(1) |
Indexes:
"rc_dom" btree (domain_id, concept_id)
"rcdom" btree (domain_id)
"rcdomvocsc" btree (domain_id, vocabulary_id, standard_concept)
Стол имеет 3,133,778 записи, поэтому Postgres не должен быть игнорирование индекса из-за малого размера таблицы.
I фильтр на Domain_ID, который индексируется, а индекс игнорируется:
OHDSI=> explain select * from record_counts where domain_id = 'Drug';
QUERY PLAN
------------------------------------------------------------------------
Seq Scan on record_counts (cost=0.00..76744.81 rows=2079187 width=87)
Filter: ((domain_id)::text = 'Drug'::text)
Я выключаю seqscan и:
OHDSI=> set enable_seqscan=false;
SET
OHDSI=> explain select * from record_counts where domain_id = 'Drug';
QUERY PLAN
-------------------------------------------------------------------------------------
Bitmap Heap Scan on record_counts (cost=42042.13..105605.97 rows=2079187 width=87)
Recheck Cond: ((domain_id)::text = 'Drug'::text)
-> Bitmap Index Scan on rcdom (cost=0.00..41522.33 rows=2079187 width=0)
Index Cond: ((domain_id)::text = 'Drug'::text)
Действительно, план говорит, что это будет дороже использовать индекс, чем нет, но почему? Если индекс позволяет обрабатывать гораздо меньше записей, не следует ли быстрее использовать его?
Текущая статистика в вашей стране? –
BTW: У таблицы нет первичного ключа? – joop
@ MikeSherrill'CatRecall ': Я запускал 'анализ record_counts'. Есть что-то еще, что мне нужно сделать? – Sigfried