Understanding BRIN index performance
От | Ivan Voras |
---|---|
Тема | Understanding BRIN index performance |
Дата | |
Msg-id | CAF-QHFVurB6hYjb2e1D-tn4rwOS9mp87vR2ymBM0LS3+iHYmiQ@mail.gmail.com обсуждение исходный текст |
Ответы |
Re: Understanding BRIN index performance
Re: Understanding BRIN index performance |
Список | pgsql-performance |
Hi,
I have a table of around 20 G, more than 220 million records, and I'm running this query on it:
explain analyze SELECT MAX(id) - (SELECT id FROM expl_transactions WHERE dateAdded < (now() - INTERVAL '10 MINUTES') ORDER BY dateAdded DESC LIMIT 1) FROM expl_transactions;
"id" is SERIAL, "dateAdded" is timestamp without timezone
The "dateAdded" field also has a "default now()" applied to it some time after its creation, and a fair amount of null values in the records (which I don't think matters for this query, but maybe I'm wrong).
My first idea is to create a default BRIN index on dateAdded since the above query is not run frequently. To my surprise, the planner refused to use the index and used sequential scan instead. When I forced sequential scanning off, I got this:
The query was executing for 40+ seconds. It seems like the "index scan" on it returns nearly 9% of the table, 25 mil rows. Since the data in dateAdded actually is sequential and fairly selective (having now() as the default over a long period of time), this surprises me.
With a normal btree index, of course, it runs fine:
Any ideas?
В списке pgsql-performance по дате отправления: