mirror of
				https://github.com/postgres/postgres.git
				synced 2025-10-24 01:29:19 +03:00 
			
		
		
		
	inet, cidr, and timetz indexes still cannot support index-only scans, because they don't store the original unmodified value in the index, but a derived approximate value.
		
			
				
	
	
		
			212 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			212 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| -- timestamptz check
 | |
| CREATE TABLE timestamptztmp (a timestamptz);
 | |
| \copy timestamptztmp from 'data/timestamptz.data'
 | |
| SET enable_seqscan=on;
 | |
| SELECT count(*) FROM timestamptztmp WHERE a <  '2018-12-18 10:59:54 GMT+3';
 | |
|  count 
 | |
| -------
 | |
|    391
 | |
| (1 row)
 | |
| 
 | |
| SELECT count(*) FROM timestamptztmp WHERE a <= '2018-12-18 10:59:54 GMT+3';
 | |
|  count 
 | |
| -------
 | |
|    392
 | |
| (1 row)
 | |
| 
 | |
| SELECT count(*) FROM timestamptztmp WHERE a  = '2018-12-18 10:59:54 GMT+3';
 | |
|  count 
 | |
| -------
 | |
|      1
 | |
| (1 row)
 | |
| 
 | |
| SELECT count(*) FROM timestamptztmp WHERE a >= '2018-12-18 10:59:54 GMT+3';
 | |
|  count 
 | |
| -------
 | |
|    158
 | |
| (1 row)
 | |
| 
 | |
| SELECT count(*) FROM timestamptztmp WHERE a >  '2018-12-18 10:59:54 GMT+3';
 | |
|  count 
 | |
| -------
 | |
|    157
 | |
| (1 row)
 | |
| 
 | |
| SELECT count(*) FROM timestamptztmp WHERE a <  '2018-12-18 10:59:54 GMT+2';
 | |
|  count 
 | |
| -------
 | |
|    391
 | |
| (1 row)
 | |
| 
 | |
| SELECT count(*) FROM timestamptztmp WHERE a <= '2018-12-18 10:59:54 GMT+2';
 | |
|  count 
 | |
| -------
 | |
|    391
 | |
| (1 row)
 | |
| 
 | |
| SELECT count(*) FROM timestamptztmp WHERE a  = '2018-12-18 10:59:54 GMT+2';
 | |
|  count 
 | |
| -------
 | |
|      0
 | |
| (1 row)
 | |
| 
 | |
| SELECT count(*) FROM timestamptztmp WHERE a >= '2018-12-18 10:59:54 GMT+2';
 | |
|  count 
 | |
| -------
 | |
|    158
 | |
| (1 row)
 | |
| 
 | |
| SELECT count(*) FROM timestamptztmp WHERE a >  '2018-12-18 10:59:54 GMT+2';
 | |
|  count 
 | |
| -------
 | |
|    158
 | |
| (1 row)
 | |
| 
 | |
| SELECT count(*) FROM timestamptztmp WHERE a <  '2018-12-18 10:59:54 GMT+4';
 | |
|  count 
 | |
| -------
 | |
|    392
 | |
| (1 row)
 | |
| 
 | |
| SELECT count(*) FROM timestamptztmp WHERE a <= '2018-12-18 10:59:54 GMT+4';
 | |
|  count 
 | |
| -------
 | |
|    392
 | |
| (1 row)
 | |
| 
 | |
| SELECT count(*) FROM timestamptztmp WHERE a  = '2018-12-18 10:59:54 GMT+4';
 | |
|  count 
 | |
| -------
 | |
|      0
 | |
| (1 row)
 | |
| 
 | |
| SELECT count(*) FROM timestamptztmp WHERE a >= '2018-12-18 10:59:54 GMT+4';
 | |
|  count 
 | |
| -------
 | |
|    157
 | |
| (1 row)
 | |
| 
 | |
| SELECT count(*) FROM timestamptztmp WHERE a >  '2018-12-18 10:59:54 GMT+4';
 | |
|  count 
 | |
| -------
 | |
|    157
 | |
| (1 row)
 | |
| 
 | |
| SELECT a, a <-> '2018-12-18 10:59:54 GMT+2' FROM timestamptztmp ORDER BY a <-> '2018-12-18 10:59:54 GMT+2' LIMIT 3;
 | |
|               a               |             ?column?              
 | |
| ------------------------------+-----------------------------------
 | |
|  Tue Dec 18 05:59:54 2018 PST | @ 1 hour
 | |
|  Thu Jan 10 03:01:34 2019 PST | @ 22 days 22 hours 1 min 40 secs
 | |
|  Thu Jan 24 12:28:12 2019 PST | @ 37 days 7 hours 28 mins 18 secs
 | |
| (3 rows)
 | |
| 
 | |
| CREATE INDEX timestamptzidx ON timestamptztmp USING gist ( a );
 | |
| SET enable_seqscan=off;
 | |
| SELECT count(*) FROM timestamptztmp WHERE a <  '2018-12-18 10:59:54 GMT+3'::timestamptz;
 | |
|  count 
 | |
| -------
 | |
|    391
 | |
| (1 row)
 | |
| 
 | |
| SELECT count(*) FROM timestamptztmp WHERE a <= '2018-12-18 10:59:54 GMT+3'::timestamptz;
 | |
|  count 
 | |
| -------
 | |
|    392
 | |
| (1 row)
 | |
| 
 | |
| SELECT count(*) FROM timestamptztmp WHERE a  = '2018-12-18 10:59:54 GMT+3'::timestamptz;
 | |
|  count 
 | |
| -------
 | |
|      1
 | |
| (1 row)
 | |
| 
 | |
| SELECT count(*) FROM timestamptztmp WHERE a >= '2018-12-18 10:59:54 GMT+3'::timestamptz;
 | |
|  count 
 | |
| -------
 | |
|    158
 | |
| (1 row)
 | |
| 
 | |
| SELECT count(*) FROM timestamptztmp WHERE a >  '2018-12-18 10:59:54 GMT+3'::timestamptz;
 | |
|  count 
 | |
| -------
 | |
|    157
 | |
| (1 row)
 | |
| 
 | |
| SELECT count(*) FROM timestamptztmp WHERE a <  '2018-12-18 10:59:54 GMT+2'::timestamptz;
 | |
|  count 
 | |
| -------
 | |
|    391
 | |
| (1 row)
 | |
| 
 | |
| SELECT count(*) FROM timestamptztmp WHERE a <= '2018-12-18 10:59:54 GMT+2'::timestamptz;
 | |
|  count 
 | |
| -------
 | |
|    391
 | |
| (1 row)
 | |
| 
 | |
| SELECT count(*) FROM timestamptztmp WHERE a  = '2018-12-18 10:59:54 GMT+2'::timestamptz;
 | |
|  count 
 | |
| -------
 | |
|      0
 | |
| (1 row)
 | |
| 
 | |
| SELECT count(*) FROM timestamptztmp WHERE a >= '2018-12-18 10:59:54 GMT+2'::timestamptz;
 | |
|  count 
 | |
| -------
 | |
|    158
 | |
| (1 row)
 | |
| 
 | |
| SELECT count(*) FROM timestamptztmp WHERE a >  '2018-12-18 10:59:54 GMT+2'::timestamptz;
 | |
|  count 
 | |
| -------
 | |
|    158
 | |
| (1 row)
 | |
| 
 | |
| SELECT count(*) FROM timestamptztmp WHERE a <  '2018-12-18 10:59:54 GMT+4'::timestamptz;
 | |
|  count 
 | |
| -------
 | |
|    392
 | |
| (1 row)
 | |
| 
 | |
| SELECT count(*) FROM timestamptztmp WHERE a <= '2018-12-18 10:59:54 GMT+4'::timestamptz;
 | |
|  count 
 | |
| -------
 | |
|    392
 | |
| (1 row)
 | |
| 
 | |
| SELECT count(*) FROM timestamptztmp WHERE a  = '2018-12-18 10:59:54 GMT+4'::timestamptz;
 | |
|  count 
 | |
| -------
 | |
|      0
 | |
| (1 row)
 | |
| 
 | |
| SELECT count(*) FROM timestamptztmp WHERE a >= '2018-12-18 10:59:54 GMT+4'::timestamptz;
 | |
|  count 
 | |
| -------
 | |
|    157
 | |
| (1 row)
 | |
| 
 | |
| SELECT count(*) FROM timestamptztmp WHERE a >  '2018-12-18 10:59:54 GMT+4'::timestamptz;
 | |
|  count 
 | |
| -------
 | |
|    157
 | |
| (1 row)
 | |
| 
 | |
| EXPLAIN (COSTS OFF)
 | |
| SELECT a, a <-> '2018-12-18 10:59:54 GMT+2' FROM timestamptztmp ORDER BY a <-> '2018-12-18 10:59:54 GMT+2' LIMIT 3;
 | |
|                                      QUERY PLAN                                     
 | |
| ------------------------------------------------------------------------------------
 | |
|  Limit
 | |
|    ->  Index Only Scan using timestamptzidx on timestamptztmp
 | |
|          Order By: (a <-> 'Tue Dec 18 04:59:54 2018 PST'::timestamp with time zone)
 | |
| (3 rows)
 | |
| 
 | |
| SELECT a, a <-> '2018-12-18 10:59:54 GMT+2' FROM timestamptztmp ORDER BY a <-> '2018-12-18 10:59:54 GMT+2' LIMIT 3;
 | |
|               a               |             ?column?              
 | |
| ------------------------------+-----------------------------------
 | |
|  Tue Dec 18 05:59:54 2018 PST | @ 1 hour
 | |
|  Thu Jan 10 03:01:34 2019 PST | @ 22 days 22 hours 1 min 40 secs
 | |
|  Thu Jan 24 12:28:12 2019 PST | @ 37 days 7 hours 28 mins 18 secs
 | |
| (3 rows)
 | |
| 
 |