From: | PG Bug reporting form <noreply(at)postgresql(dot)org> |
---|---|
To: | pgsql-bugs(at)lists(dot)postgresql(dot)org |
Cc: | imyfess(at)gmail(dot)com |
Subject: | BUG #16251: ::text type casting of a constant breaks query performance |
Date: | 2020-02-08 06:43:22 |
Message-ID: | 16251-51e254d9a8bacbb2@postgresql.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-bugs |
The following bug has been logged on the website:
Bug reference: 16251
Logged by: Dima Pavlov
Email address: imyfess(at)gmail(dot)com
PostgreSQL version: 12.1
Operating system: Windows 10
Description:
Test table and indexes (PostgreSQL 12.1):
CREATE TABLE t (dt timestamp with time zone);
CREATE INDEX ind ON t USING btree (dt);
INSERT
INTO t(dt)
SELECT
(
timestamp '2020-01-01 00:00:00' +
random() * (
timestamp '2020-02-29 00:00:00' -
timestamp '2020-01-01 00:00:00'
)
)
FROM generate_series(1, 10000)
-------------------------------------
In the first query, everything is ok, appropriate index "ind" is used:
explain (analyze, buffers)
SELECT *
FROM t
WHERE
('2020-02-08')::date IS NULL
OR
dt > '2020-02-08'
ORDER BY dt
LIMIT 1
"Limit (cost=0.29..0.37 rows=1 width=8) (actual time=0.186..0.188 rows=1
loops=1)"
" Buffers: shared hit=3"
" -> Index Only Scan using ind on t (cost=0.29..303.75 rows=3627 width=8)
(actual time=0.184..0.184 rows=1 loops=1)"
" Index Cond: (dt > '2020-02-08 00:00:00+05'::timestamp with time
zone)"
" Heap Fetches: 1"
" Buffers: shared hit=3"
"Planning Time: 2.365 ms"
"Execution Time: 0.239 ms"
-----------------------------------------------
With '::text' type casting of '2020-02-08' (which is already text) query
permofance is very low
explain (analyze, buffers)
SELECT *
FROM t
WHERE
('2020-02-08'::text)::date IS NULL
OR
dt > '2020-02-08'
ORDER BY dt
LIMIT 1
"Limit (cost=0.29..0.44 rows=1 width=8) (actual time=45.306..45.307 rows=1
loops=1)"
" Buffers: shared hit=6232"
" -> Index Only Scan using ind on t (cost=0.29..561.28 rows=3658 width=8)
(actual time=45.304..45.304 rows=1 loops=1)"
" Filter: ((('2020-02-08'::cstring)::date IS NULL) OR (dt >
'2020-02-08 00:00:00+05'::timestamp with time zone))"
" Rows Removed by Filter: 6367"
" Heap Fetches: 6368"
" Buffers: shared hit=6232"
"Planning Time: 0.348 ms"
"Execution Time: 45.343 ms"
From | Date | Subject | |
---|---|---|---|
Next Message | Pavel Stehule | 2020-02-08 07:09:11 | Re: BUG #16251: ::text type casting of a constant breaks query performance |
Previous Message | Jehan-Guillaume de Rorthais | 2020-02-07 22:26:32 | Re: Another FK violation when referencing a multi-level partitioned table |