mirror of
https://github.com/postgres/postgres.git
synced 2025-04-25 21:42:33 +03:00
Use the term "radix tree" instead of "suffix tree" for SP-GiST text opclass.
What we have implemented is a radix tree (or a radix trie or a patricia trie), but the docs and code comments incorrectly called it a "suffix tree". Alexander Korotkov
This commit is contained in:
parent
20c00ca668
commit
cb953d8b1b
@ -267,7 +267,7 @@ SELECT * FROM places ORDER BY location <-> point '(101,456)' LIMIT 10;
|
||||
SP-GiST indexes, like GiST indexes, offer an infrastructure that supports
|
||||
various kinds of searches. SP-GiST permits implementation of a wide range
|
||||
of different non-balanced disk-based data structures, such as quadtrees,
|
||||
k-d trees, and suffix trees (tries). As an example, the standard distribution of
|
||||
k-d trees, and radix trees (tries). As an example, the standard distribution of
|
||||
<productname>PostgreSQL</productname> includes SP-GiST operator classes
|
||||
for two-dimensional points, which support indexed
|
||||
queries using these operators:
|
||||
|
@ -15,7 +15,7 @@
|
||||
<acronym>SP-GiST</acronym> is an abbreviation for space-partitioned
|
||||
<acronym>GiST</acronym>. <acronym>SP-GiST</acronym> supports partitioned
|
||||
search trees, which facilitate development of a wide range of different
|
||||
non-balanced data structures, such as quad-trees, k-d trees, and suffix
|
||||
non-balanced data structures, such as quad-trees, k-d trees, and radix
|
||||
trees (tries). The common feature of these structures is that they
|
||||
repeatedly divide the search space into partitions that need not be
|
||||
of equal size. Searches that are well matched to the partitioning rule
|
||||
@ -81,9 +81,9 @@
|
||||
A node contains a downlink that leads to either another, lower-level inner
|
||||
tuple, or a short list of leaf tuples that all lie on the same index page.
|
||||
Each node has a <firstterm>label</> that describes it; for example,
|
||||
in a suffix tree the node label could be the next character of the string
|
||||
in a radix tree the node label could be the next character of the string
|
||||
value. Optionally, an inner tuple can have a <firstterm>prefix</> value
|
||||
that describes all its members. In a suffix tree this could be the common
|
||||
that describes all its members. In a radix tree this could be the common
|
||||
prefix of the represented strings. The prefix value is not necessarily
|
||||
really a prefix, but can be any data needed by the operator class;
|
||||
for example, in a quad-tree it can store the central point that the four
|
||||
@ -636,7 +636,7 @@ typedef struct spgLeafConsistentOut
|
||||
<para>
|
||||
Individual leaf tuples and inner tuples must fit on a single index page
|
||||
(8KB by default). Therefore, when indexing values of variable-length
|
||||
data types, long values can only be supported by methods such as suffix
|
||||
data types, long values can only be supported by methods such as radix
|
||||
trees, in which each level of the tree includes a prefix that is short
|
||||
enough to fit on a page, and the final leaf level includes a suffix also
|
||||
short enough to fit on a page. The operator class should set
|
||||
@ -740,7 +740,7 @@ typedef struct spgLeafConsistentOut
|
||||
<para>
|
||||
The <productname>PostgreSQL</productname> source distribution includes
|
||||
several examples of index operator classes for
|
||||
<acronym>SP-GiST</acronym>. The core system currently provides suffix
|
||||
<acronym>SP-GiST</acronym>. The core system currently provides radix
|
||||
trees over text columns and two types of trees over points: quad-tree and
|
||||
k-d tree. Look into <filename>src/backend/access/spgist/</> to see the
|
||||
code.
|
||||
|
@ -2,7 +2,7 @@ src/backend/access/spgist/README
|
||||
|
||||
SP-GiST is an abbreviation of space-partitioned GiST. It provides a
|
||||
generalized infrastructure for implementing space-partitioned data
|
||||
structures, such as quadtrees, k-d trees, and suffix trees (tries). When
|
||||
structures, such as quadtrees, k-d trees, and radix trees (tries). When
|
||||
implemented in main memory, these structures are usually designed as a set of
|
||||
dynamically-allocated nodes linked by pointers. This is not suitable for
|
||||
direct storing on disk, since the chains of pointers can be rather long and
|
||||
@ -56,18 +56,18 @@ Inner tuple consists of:
|
||||
|
||||
optional prefix value - all successors must be consistent with it.
|
||||
Example:
|
||||
suffix tree - prefix value is a common prefix string
|
||||
radix tree - prefix value is a common prefix string
|
||||
quad tree - centroid
|
||||
k-d tree - one coordinate
|
||||
|
||||
list of nodes, where node is a (label, pointer) pair.
|
||||
Example of a label: a single character for suffix tree
|
||||
Example of a label: a single character for radix tree
|
||||
|
||||
Leaf tuple consists of:
|
||||
|
||||
a leaf value
|
||||
Example:
|
||||
suffix tree - the rest of string (postfix)
|
||||
radix tree - the rest of string (postfix)
|
||||
quad and k-d tree - the point itself
|
||||
|
||||
ItemPointer to the heap
|
||||
@ -122,7 +122,7 @@ space is as good as we can easily make it.
|
||||
(2) Current implementation allows to do picksplit and insert a new leaf tuple
|
||||
in one operation, if the new list of leaf tuples fits on one page. It's
|
||||
always possible for trees with small nodes like quad tree or k-d tree, but
|
||||
suffix trees may require another picksplit.
|
||||
radix trees may require another picksplit.
|
||||
|
||||
(3) Addition of node must keep size of inner tuple small enough to fit on a
|
||||
page. After addition, inner tuple could become too large to be stored on
|
||||
@ -132,14 +132,14 @@ another page, we can't change the numbers of other tuples on the page, else
|
||||
we'd make downlink pointers to them invalid. To prevent that, SP-GiST leaves
|
||||
a "placeholder" tuple, which can be reused later whenever another tuple is
|
||||
added to the page. See also Concurrency and Vacuum sections below. Right now
|
||||
only suffix trees could add a node to the tuple; quad trees and k-d trees
|
||||
only radix trees could add a node to the tuple; quad trees and k-d trees
|
||||
make all possible nodes at once in PickSplitFn() call.
|
||||
|
||||
(4) Prefix value could only partially match a new value, so the SplitTuple
|
||||
action allows breaking the current tree branch into upper and lower sections.
|
||||
Another way to say it is that we can split the current inner tuple into
|
||||
"prefix" and "postfix" parts, where the prefix part is able to match the
|
||||
incoming new value. Consider example of insertion into a suffix tree. We use
|
||||
incoming new value. Consider example of insertion into a radix tree. We use
|
||||
the following notation, where tuple's id is just for discussion (no such id
|
||||
is actually stored):
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* spgtextproc.c
|
||||
* implementation of compressed-suffix tree over text
|
||||
* implementation of radix tree (compressed trie) over text
|
||||
*
|
||||
*
|
||||
* Portions Copyright (c) 1996-2013, PostgreSQL Global Development Group
|
||||
@ -23,7 +23,7 @@
|
||||
|
||||
|
||||
/*
|
||||
* In the worst case, a inner tuple in a text suffix tree could have as many
|
||||
* In the worst case, a inner tuple in a text radix tree could have as many
|
||||
* as 256 nodes (one for each possible byte value). Each node can take 16
|
||||
* bytes on MAXALIGN=8 machines. The inner tuple must fit on an index page
|
||||
* of size BLCKSZ. Rather than assuming we know the exact amount of overhead
|
||||
|
@ -4700,15 +4700,15 @@ DATA(insert OID = 4026 ( spg_kd_inner_consistent PGNSP PGUID 12 1 0 0 0 f f f f
|
||||
DESCR("SP-GiST support for k-d tree over point");
|
||||
|
||||
DATA(insert OID = 4027 ( spg_text_config PGNSP PGUID 12 1 0 0 0 f f f f t f i 2 0 2278 "2281 2281" _null_ _null_ _null_ _null_ spg_text_config _null_ _null_ _null_ ));
|
||||
DESCR("SP-GiST support for suffix tree over text");
|
||||
DESCR("SP-GiST support for radix tree over text");
|
||||
DATA(insert OID = 4028 ( spg_text_choose PGNSP PGUID 12 1 0 0 0 f f f f t f i 2 0 2278 "2281 2281" _null_ _null_ _null_ _null_ spg_text_choose _null_ _null_ _null_ ));
|
||||
DESCR("SP-GiST support for suffix tree over text");
|
||||
DESCR("SP-GiST support for radix tree over text");
|
||||
DATA(insert OID = 4029 ( spg_text_picksplit PGNSP PGUID 12 1 0 0 0 f f f f t f i 2 0 2278 "2281 2281" _null_ _null_ _null_ _null_ spg_text_picksplit _null_ _null_ _null_ ));
|
||||
DESCR("SP-GiST support for suffix tree over text");
|
||||
DESCR("SP-GiST support for radix tree over text");
|
||||
DATA(insert OID = 4030 ( spg_text_inner_consistent PGNSP PGUID 12 1 0 0 0 f f f f t f i 2 0 2278 "2281 2281" _null_ _null_ _null_ _null_ spg_text_inner_consistent _null_ _null_ _null_ ));
|
||||
DESCR("SP-GiST support for suffix tree over text");
|
||||
DESCR("SP-GiST support for radix tree over text");
|
||||
DATA(insert OID = 4031 ( spg_text_leaf_consistent PGNSP PGUID 12 1 0 0 0 f f f f t f i 2 0 16 "2281 2281" _null_ _null_ _null_ _null_ spg_text_leaf_consistent _null_ _null_ _null_ ));
|
||||
DESCR("SP-GiST support for suffix tree over text");
|
||||
DESCR("SP-GiST support for radix tree over text");
|
||||
|
||||
DATA(insert OID = 3469 ( spg_range_quad_config PGNSP PGUID 12 1 0 0 0 f f f f t f i 2 0 2278 "2281 2281" _null_ _null_ _null_ _null_ spg_range_quad_config _null_ _null_ _null_ ));
|
||||
DESCR("SP-GiST support for quad tree over range");
|
||||
|
@ -72,13 +72,13 @@ INSERT INTO quad_point_tbl VALUES (NULL), (NULL), (NULL);
|
||||
CREATE INDEX sp_quad_ind ON quad_point_tbl USING spgist (p);
|
||||
CREATE TABLE kd_point_tbl AS SELECT * FROM quad_point_tbl;
|
||||
CREATE INDEX sp_kd_ind ON kd_point_tbl USING spgist (p kd_point_ops);
|
||||
CREATE TABLE suffix_text_tbl AS
|
||||
CREATE TABLE radix_text_tbl AS
|
||||
SELECT name AS t FROM road WHERE name !~ '^[0-9]';
|
||||
INSERT INTO suffix_text_tbl
|
||||
INSERT INTO radix_text_tbl
|
||||
SELECT 'P0123456789abcdef' FROM generate_series(1,1000);
|
||||
INSERT INTO suffix_text_tbl VALUES ('P0123456789abcde');
|
||||
INSERT INTO suffix_text_tbl VALUES ('P0123456789abcdefF');
|
||||
CREATE INDEX sp_suff_ind ON suffix_text_tbl USING spgist (t);
|
||||
INSERT INTO radix_text_tbl VALUES ('P0123456789abcde');
|
||||
INSERT INTO radix_text_tbl VALUES ('P0123456789abcdefF');
|
||||
CREATE INDEX sp_radix_ind ON radix_text_tbl USING spgist (t);
|
||||
--
|
||||
-- Test GiST and SP-GiST indexes
|
||||
--
|
||||
@ -288,79 +288,79 @@ SELECT count(*) FROM quad_point_tbl WHERE p ~= '(4585, 365)';
|
||||
1
|
||||
(1 row)
|
||||
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t = 'P0123456789abcdef';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t = 'P0123456789abcdef';
|
||||
count
|
||||
-------
|
||||
1000
|
||||
(1 row)
|
||||
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t = 'P0123456789abcde';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t = 'P0123456789abcde';
|
||||
count
|
||||
-------
|
||||
1
|
||||
(1 row)
|
||||
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t = 'P0123456789abcdefF';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t = 'P0123456789abcdefF';
|
||||
count
|
||||
-------
|
||||
1
|
||||
(1 row)
|
||||
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t < 'Aztec Ct ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t < 'Aztec Ct ';
|
||||
count
|
||||
-------
|
||||
272
|
||||
(1 row)
|
||||
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t ~<~ 'Aztec Ct ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t ~<~ 'Aztec Ct ';
|
||||
count
|
||||
-------
|
||||
272
|
||||
(1 row)
|
||||
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t <= 'Aztec Ct ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t <= 'Aztec Ct ';
|
||||
count
|
||||
-------
|
||||
273
|
||||
(1 row)
|
||||
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t ~<=~ 'Aztec Ct ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t ~<=~ 'Aztec Ct ';
|
||||
count
|
||||
-------
|
||||
273
|
||||
(1 row)
|
||||
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t = 'Aztec Ct ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t = 'Aztec Ct ';
|
||||
count
|
||||
-------
|
||||
1
|
||||
(1 row)
|
||||
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t = 'Worth St ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t = 'Worth St ';
|
||||
count
|
||||
-------
|
||||
2
|
||||
(1 row)
|
||||
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t >= 'Worth St ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t >= 'Worth St ';
|
||||
count
|
||||
-------
|
||||
50
|
||||
(1 row)
|
||||
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t ~>=~ 'Worth St ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t ~>=~ 'Worth St ';
|
||||
count
|
||||
-------
|
||||
50
|
||||
(1 row)
|
||||
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t > 'Worth St ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t > 'Worth St ';
|
||||
count
|
||||
-------
|
||||
48
|
||||
(1 row)
|
||||
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t ~>~ 'Worth St ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t ~>~ 'Worth St ';
|
||||
count
|
||||
-------
|
||||
48
|
||||
@ -952,195 +952,195 @@ SELECT count(*) FROM kd_point_tbl WHERE p ~= '(4585, 365)';
|
||||
(1 row)
|
||||
|
||||
EXPLAIN (COSTS OFF)
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t = 'P0123456789abcdef';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t = 'P0123456789abcdef';
|
||||
QUERY PLAN
|
||||
------------------------------------------------------------
|
||||
Aggregate
|
||||
-> Index Only Scan using sp_suff_ind on suffix_text_tbl
|
||||
-> Index Only Scan using sp_radix_ind on radix_text_tbl
|
||||
Index Cond: (t = 'P0123456789abcdef'::text)
|
||||
(3 rows)
|
||||
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t = 'P0123456789abcdef';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t = 'P0123456789abcdef';
|
||||
count
|
||||
-------
|
||||
1000
|
||||
(1 row)
|
||||
|
||||
EXPLAIN (COSTS OFF)
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t = 'P0123456789abcde';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t = 'P0123456789abcde';
|
||||
QUERY PLAN
|
||||
------------------------------------------------------------
|
||||
Aggregate
|
||||
-> Index Only Scan using sp_suff_ind on suffix_text_tbl
|
||||
-> Index Only Scan using sp_radix_ind on radix_text_tbl
|
||||
Index Cond: (t = 'P0123456789abcde'::text)
|
||||
(3 rows)
|
||||
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t = 'P0123456789abcde';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t = 'P0123456789abcde';
|
||||
count
|
||||
-------
|
||||
1
|
||||
(1 row)
|
||||
|
||||
EXPLAIN (COSTS OFF)
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t = 'P0123456789abcdefF';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t = 'P0123456789abcdefF';
|
||||
QUERY PLAN
|
||||
------------------------------------------------------------
|
||||
Aggregate
|
||||
-> Index Only Scan using sp_suff_ind on suffix_text_tbl
|
||||
-> Index Only Scan using sp_radix_ind on radix_text_tbl
|
||||
Index Cond: (t = 'P0123456789abcdefF'::text)
|
||||
(3 rows)
|
||||
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t = 'P0123456789abcdefF';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t = 'P0123456789abcdefF';
|
||||
count
|
||||
-------
|
||||
1
|
||||
(1 row)
|
||||
|
||||
EXPLAIN (COSTS OFF)
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t < 'Aztec Ct ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t < 'Aztec Ct ';
|
||||
QUERY PLAN
|
||||
----------------------------------------------------------------------
|
||||
Aggregate
|
||||
-> Index Only Scan using sp_suff_ind on suffix_text_tbl
|
||||
-> Index Only Scan using sp_radix_ind on radix_text_tbl
|
||||
Index Cond: (t < 'Aztec Ct '::text)
|
||||
(3 rows)
|
||||
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t < 'Aztec Ct ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t < 'Aztec Ct ';
|
||||
count
|
||||
-------
|
||||
272
|
||||
(1 row)
|
||||
|
||||
EXPLAIN (COSTS OFF)
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t ~<~ 'Aztec Ct ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t ~<~ 'Aztec Ct ';
|
||||
QUERY PLAN
|
||||
------------------------------------------------------------------------
|
||||
Aggregate
|
||||
-> Index Only Scan using sp_suff_ind on suffix_text_tbl
|
||||
-> Index Only Scan using sp_radix_ind on radix_text_tbl
|
||||
Index Cond: (t ~<~ 'Aztec Ct '::text)
|
||||
(3 rows)
|
||||
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t ~<~ 'Aztec Ct ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t ~<~ 'Aztec Ct ';
|
||||
count
|
||||
-------
|
||||
272
|
||||
(1 row)
|
||||
|
||||
EXPLAIN (COSTS OFF)
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t <= 'Aztec Ct ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t <= 'Aztec Ct ';
|
||||
QUERY PLAN
|
||||
-----------------------------------------------------------------------
|
||||
Aggregate
|
||||
-> Index Only Scan using sp_suff_ind on suffix_text_tbl
|
||||
-> Index Only Scan using sp_radix_ind on radix_text_tbl
|
||||
Index Cond: (t <= 'Aztec Ct '::text)
|
||||
(3 rows)
|
||||
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t <= 'Aztec Ct ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t <= 'Aztec Ct ';
|
||||
count
|
||||
-------
|
||||
273
|
||||
(1 row)
|
||||
|
||||
EXPLAIN (COSTS OFF)
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t ~<=~ 'Aztec Ct ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t ~<=~ 'Aztec Ct ';
|
||||
QUERY PLAN
|
||||
-------------------------------------------------------------------------
|
||||
Aggregate
|
||||
-> Index Only Scan using sp_suff_ind on suffix_text_tbl
|
||||
-> Index Only Scan using sp_radix_ind on radix_text_tbl
|
||||
Index Cond: (t ~<=~ 'Aztec Ct '::text)
|
||||
(3 rows)
|
||||
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t ~<=~ 'Aztec Ct ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t ~<=~ 'Aztec Ct ';
|
||||
count
|
||||
-------
|
||||
273
|
||||
(1 row)
|
||||
|
||||
EXPLAIN (COSTS OFF)
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t = 'Aztec Ct ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t = 'Aztec Ct ';
|
||||
QUERY PLAN
|
||||
----------------------------------------------------------------------
|
||||
Aggregate
|
||||
-> Index Only Scan using sp_suff_ind on suffix_text_tbl
|
||||
-> Index Only Scan using sp_radix_ind on radix_text_tbl
|
||||
Index Cond: (t = 'Aztec Ct '::text)
|
||||
(3 rows)
|
||||
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t = 'Aztec Ct ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t = 'Aztec Ct ';
|
||||
count
|
||||
-------
|
||||
1
|
||||
(1 row)
|
||||
|
||||
EXPLAIN (COSTS OFF)
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t = 'Worth St ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t = 'Worth St ';
|
||||
QUERY PLAN
|
||||
----------------------------------------------------------------------
|
||||
Aggregate
|
||||
-> Index Only Scan using sp_suff_ind on suffix_text_tbl
|
||||
-> Index Only Scan using sp_radix_ind on radix_text_tbl
|
||||
Index Cond: (t = 'Worth St '::text)
|
||||
(3 rows)
|
||||
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t = 'Worth St ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t = 'Worth St ';
|
||||
count
|
||||
-------
|
||||
2
|
||||
(1 row)
|
||||
|
||||
EXPLAIN (COSTS OFF)
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t >= 'Worth St ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t >= 'Worth St ';
|
||||
QUERY PLAN
|
||||
-----------------------------------------------------------------------
|
||||
Aggregate
|
||||
-> Index Only Scan using sp_suff_ind on suffix_text_tbl
|
||||
-> Index Only Scan using sp_radix_ind on radix_text_tbl
|
||||
Index Cond: (t >= 'Worth St '::text)
|
||||
(3 rows)
|
||||
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t >= 'Worth St ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t >= 'Worth St ';
|
||||
count
|
||||
-------
|
||||
50
|
||||
(1 row)
|
||||
|
||||
EXPLAIN (COSTS OFF)
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t ~>=~ 'Worth St ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t ~>=~ 'Worth St ';
|
||||
QUERY PLAN
|
||||
-------------------------------------------------------------------------
|
||||
Aggregate
|
||||
-> Index Only Scan using sp_suff_ind on suffix_text_tbl
|
||||
-> Index Only Scan using sp_radix_ind on radix_text_tbl
|
||||
Index Cond: (t ~>=~ 'Worth St '::text)
|
||||
(3 rows)
|
||||
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t ~>=~ 'Worth St ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t ~>=~ 'Worth St ';
|
||||
count
|
||||
-------
|
||||
50
|
||||
(1 row)
|
||||
|
||||
EXPLAIN (COSTS OFF)
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t > 'Worth St ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t > 'Worth St ';
|
||||
QUERY PLAN
|
||||
----------------------------------------------------------------------
|
||||
Aggregate
|
||||
-> Index Only Scan using sp_suff_ind on suffix_text_tbl
|
||||
-> Index Only Scan using sp_radix_ind on radix_text_tbl
|
||||
Index Cond: (t > 'Worth St '::text)
|
||||
(3 rows)
|
||||
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t > 'Worth St ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t > 'Worth St ';
|
||||
count
|
||||
-------
|
||||
48
|
||||
(1 row)
|
||||
|
||||
EXPLAIN (COSTS OFF)
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t ~>~ 'Worth St ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t ~>~ 'Worth St ';
|
||||
QUERY PLAN
|
||||
------------------------------------------------------------------------
|
||||
Aggregate
|
||||
-> Index Only Scan using sp_suff_ind on suffix_text_tbl
|
||||
-> Index Only Scan using sp_radix_ind on radix_text_tbl
|
||||
Index Cond: (t ~>~ 'Worth St '::text)
|
||||
(3 rows)
|
||||
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t ~>~ 'Worth St ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t ~>~ 'Worth St ';
|
||||
count
|
||||
-------
|
||||
48
|
||||
@ -1459,221 +1459,221 @@ SELECT count(*) FROM kd_point_tbl WHERE p ~= '(4585, 365)';
|
||||
(1 row)
|
||||
|
||||
EXPLAIN (COSTS OFF)
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t = 'P0123456789abcdef';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t = 'P0123456789abcdef';
|
||||
QUERY PLAN
|
||||
-----------------------------------------------------------
|
||||
Aggregate
|
||||
-> Bitmap Heap Scan on suffix_text_tbl
|
||||
-> Bitmap Heap Scan on radix_text_tbl
|
||||
Recheck Cond: (t = 'P0123456789abcdef'::text)
|
||||
-> Bitmap Index Scan on sp_suff_ind
|
||||
-> Bitmap Index Scan on sp_radix_ind
|
||||
Index Cond: (t = 'P0123456789abcdef'::text)
|
||||
(5 rows)
|
||||
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t = 'P0123456789abcdef';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t = 'P0123456789abcdef';
|
||||
count
|
||||
-------
|
||||
1000
|
||||
(1 row)
|
||||
|
||||
EXPLAIN (COSTS OFF)
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t = 'P0123456789abcde';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t = 'P0123456789abcde';
|
||||
QUERY PLAN
|
||||
----------------------------------------------------------
|
||||
Aggregate
|
||||
-> Bitmap Heap Scan on suffix_text_tbl
|
||||
-> Bitmap Heap Scan on radix_text_tbl
|
||||
Recheck Cond: (t = 'P0123456789abcde'::text)
|
||||
-> Bitmap Index Scan on sp_suff_ind
|
||||
-> Bitmap Index Scan on sp_radix_ind
|
||||
Index Cond: (t = 'P0123456789abcde'::text)
|
||||
(5 rows)
|
||||
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t = 'P0123456789abcde';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t = 'P0123456789abcde';
|
||||
count
|
||||
-------
|
||||
1
|
||||
(1 row)
|
||||
|
||||
EXPLAIN (COSTS OFF)
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t = 'P0123456789abcdefF';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t = 'P0123456789abcdefF';
|
||||
QUERY PLAN
|
||||
------------------------------------------------------------
|
||||
Aggregate
|
||||
-> Bitmap Heap Scan on suffix_text_tbl
|
||||
-> Bitmap Heap Scan on radix_text_tbl
|
||||
Recheck Cond: (t = 'P0123456789abcdefF'::text)
|
||||
-> Bitmap Index Scan on sp_suff_ind
|
||||
-> Bitmap Index Scan on sp_radix_ind
|
||||
Index Cond: (t = 'P0123456789abcdefF'::text)
|
||||
(5 rows)
|
||||
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t = 'P0123456789abcdefF';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t = 'P0123456789abcdefF';
|
||||
count
|
||||
-------
|
||||
1
|
||||
(1 row)
|
||||
|
||||
EXPLAIN (COSTS OFF)
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t < 'Aztec Ct ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t < 'Aztec Ct ';
|
||||
QUERY PLAN
|
||||
----------------------------------------------------------------------------
|
||||
Aggregate
|
||||
-> Bitmap Heap Scan on suffix_text_tbl
|
||||
-> Bitmap Heap Scan on radix_text_tbl
|
||||
Recheck Cond: (t < 'Aztec Ct '::text)
|
||||
-> Bitmap Index Scan on sp_suff_ind
|
||||
-> Bitmap Index Scan on sp_radix_ind
|
||||
Index Cond: (t < 'Aztec Ct '::text)
|
||||
(5 rows)
|
||||
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t < 'Aztec Ct ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t < 'Aztec Ct ';
|
||||
count
|
||||
-------
|
||||
272
|
||||
(1 row)
|
||||
|
||||
EXPLAIN (COSTS OFF)
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t ~<~ 'Aztec Ct ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t ~<~ 'Aztec Ct ';
|
||||
QUERY PLAN
|
||||
------------------------------------------------------------------------------
|
||||
Aggregate
|
||||
-> Bitmap Heap Scan on suffix_text_tbl
|
||||
-> Bitmap Heap Scan on radix_text_tbl
|
||||
Recheck Cond: (t ~<~ 'Aztec Ct '::text)
|
||||
-> Bitmap Index Scan on sp_suff_ind
|
||||
-> Bitmap Index Scan on sp_radix_ind
|
||||
Index Cond: (t ~<~ 'Aztec Ct '::text)
|
||||
(5 rows)
|
||||
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t ~<~ 'Aztec Ct ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t ~<~ 'Aztec Ct ';
|
||||
count
|
||||
-------
|
||||
272
|
||||
(1 row)
|
||||
|
||||
EXPLAIN (COSTS OFF)
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t <= 'Aztec Ct ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t <= 'Aztec Ct ';
|
||||
QUERY PLAN
|
||||
-----------------------------------------------------------------------------
|
||||
Aggregate
|
||||
-> Bitmap Heap Scan on suffix_text_tbl
|
||||
-> Bitmap Heap Scan on radix_text_tbl
|
||||
Recheck Cond: (t <= 'Aztec Ct '::text)
|
||||
-> Bitmap Index Scan on sp_suff_ind
|
||||
-> Bitmap Index Scan on sp_radix_ind
|
||||
Index Cond: (t <= 'Aztec Ct '::text)
|
||||
(5 rows)
|
||||
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t <= 'Aztec Ct ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t <= 'Aztec Ct ';
|
||||
count
|
||||
-------
|
||||
273
|
||||
(1 row)
|
||||
|
||||
EXPLAIN (COSTS OFF)
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t ~<=~ 'Aztec Ct ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t ~<=~ 'Aztec Ct ';
|
||||
QUERY PLAN
|
||||
-------------------------------------------------------------------------------
|
||||
Aggregate
|
||||
-> Bitmap Heap Scan on suffix_text_tbl
|
||||
-> Bitmap Heap Scan on radix_text_tbl
|
||||
Recheck Cond: (t ~<=~ 'Aztec Ct '::text)
|
||||
-> Bitmap Index Scan on sp_suff_ind
|
||||
-> Bitmap Index Scan on sp_radix_ind
|
||||
Index Cond: (t ~<=~ 'Aztec Ct '::text)
|
||||
(5 rows)
|
||||
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t ~<=~ 'Aztec Ct ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t ~<=~ 'Aztec Ct ';
|
||||
count
|
||||
-------
|
||||
273
|
||||
(1 row)
|
||||
|
||||
EXPLAIN (COSTS OFF)
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t = 'Aztec Ct ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t = 'Aztec Ct ';
|
||||
QUERY PLAN
|
||||
----------------------------------------------------------------------------
|
||||
Aggregate
|
||||
-> Bitmap Heap Scan on suffix_text_tbl
|
||||
-> Bitmap Heap Scan on radix_text_tbl
|
||||
Recheck Cond: (t = 'Aztec Ct '::text)
|
||||
-> Bitmap Index Scan on sp_suff_ind
|
||||
-> Bitmap Index Scan on sp_radix_ind
|
||||
Index Cond: (t = 'Aztec Ct '::text)
|
||||
(5 rows)
|
||||
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t = 'Aztec Ct ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t = 'Aztec Ct ';
|
||||
count
|
||||
-------
|
||||
1
|
||||
(1 row)
|
||||
|
||||
EXPLAIN (COSTS OFF)
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t = 'Worth St ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t = 'Worth St ';
|
||||
QUERY PLAN
|
||||
----------------------------------------------------------------------------
|
||||
Aggregate
|
||||
-> Bitmap Heap Scan on suffix_text_tbl
|
||||
-> Bitmap Heap Scan on radix_text_tbl
|
||||
Recheck Cond: (t = 'Worth St '::text)
|
||||
-> Bitmap Index Scan on sp_suff_ind
|
||||
-> Bitmap Index Scan on sp_radix_ind
|
||||
Index Cond: (t = 'Worth St '::text)
|
||||
(5 rows)
|
||||
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t = 'Worth St ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t = 'Worth St ';
|
||||
count
|
||||
-------
|
||||
2
|
||||
(1 row)
|
||||
|
||||
EXPLAIN (COSTS OFF)
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t >= 'Worth St ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t >= 'Worth St ';
|
||||
QUERY PLAN
|
||||
-----------------------------------------------------------------------------
|
||||
Aggregate
|
||||
-> Bitmap Heap Scan on suffix_text_tbl
|
||||
-> Bitmap Heap Scan on radix_text_tbl
|
||||
Recheck Cond: (t >= 'Worth St '::text)
|
||||
-> Bitmap Index Scan on sp_suff_ind
|
||||
-> Bitmap Index Scan on sp_radix_ind
|
||||
Index Cond: (t >= 'Worth St '::text)
|
||||
(5 rows)
|
||||
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t >= 'Worth St ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t >= 'Worth St ';
|
||||
count
|
||||
-------
|
||||
50
|
||||
(1 row)
|
||||
|
||||
EXPLAIN (COSTS OFF)
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t ~>=~ 'Worth St ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t ~>=~ 'Worth St ';
|
||||
QUERY PLAN
|
||||
-------------------------------------------------------------------------------
|
||||
Aggregate
|
||||
-> Bitmap Heap Scan on suffix_text_tbl
|
||||
-> Bitmap Heap Scan on radix_text_tbl
|
||||
Recheck Cond: (t ~>=~ 'Worth St '::text)
|
||||
-> Bitmap Index Scan on sp_suff_ind
|
||||
-> Bitmap Index Scan on sp_radix_ind
|
||||
Index Cond: (t ~>=~ 'Worth St '::text)
|
||||
(5 rows)
|
||||
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t ~>=~ 'Worth St ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t ~>=~ 'Worth St ';
|
||||
count
|
||||
-------
|
||||
50
|
||||
(1 row)
|
||||
|
||||
EXPLAIN (COSTS OFF)
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t > 'Worth St ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t > 'Worth St ';
|
||||
QUERY PLAN
|
||||
----------------------------------------------------------------------------
|
||||
Aggregate
|
||||
-> Bitmap Heap Scan on suffix_text_tbl
|
||||
-> Bitmap Heap Scan on radix_text_tbl
|
||||
Recheck Cond: (t > 'Worth St '::text)
|
||||
-> Bitmap Index Scan on sp_suff_ind
|
||||
-> Bitmap Index Scan on sp_radix_ind
|
||||
Index Cond: (t > 'Worth St '::text)
|
||||
(5 rows)
|
||||
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t > 'Worth St ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t > 'Worth St ';
|
||||
count
|
||||
-------
|
||||
48
|
||||
(1 row)
|
||||
|
||||
EXPLAIN (COSTS OFF)
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t ~>~ 'Worth St ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t ~>~ 'Worth St ';
|
||||
QUERY PLAN
|
||||
------------------------------------------------------------------------------
|
||||
Aggregate
|
||||
-> Bitmap Heap Scan on suffix_text_tbl
|
||||
-> Bitmap Heap Scan on radix_text_tbl
|
||||
Recheck Cond: (t ~>~ 'Worth St '::text)
|
||||
-> Bitmap Index Scan on sp_suff_ind
|
||||
-> Bitmap Index Scan on sp_radix_ind
|
||||
Index Cond: (t ~>~ 'Worth St '::text)
|
||||
(5 rows)
|
||||
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t ~>~ 'Worth St ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t ~>~ 'Worth St ';
|
||||
count
|
||||
-------
|
||||
48
|
||||
|
@ -137,6 +137,7 @@ SELECT relname, relhasindex
|
||||
point_tbl | t
|
||||
polygon_tbl | t
|
||||
quad_point_tbl | t
|
||||
radix_text_tbl | t
|
||||
ramp | f
|
||||
real_city | f
|
||||
reltime_tbl | f
|
||||
@ -152,7 +153,6 @@ SELECT relname, relhasindex
|
||||
sql_sizing_profiles | f
|
||||
stud_emp | f
|
||||
student | f
|
||||
suffix_text_tbl | t
|
||||
tenk1 | t
|
||||
tenk2 | t
|
||||
test_range_excl | t
|
||||
|
@ -660,6 +660,7 @@ SELECT user_relns() AS user_relns
|
||||
point_tbl
|
||||
polygon_tbl
|
||||
quad_point_tbl
|
||||
radix_text_tbl
|
||||
ramp
|
||||
random_tbl
|
||||
real_city
|
||||
@ -671,7 +672,6 @@ SELECT user_relns() AS user_relns
|
||||
stud_emp
|
||||
student
|
||||
subselect_tbl
|
||||
suffix_text_tbl
|
||||
t
|
||||
tenk1
|
||||
tenk2
|
||||
|
@ -110,15 +110,15 @@ CREATE TABLE kd_point_tbl AS SELECT * FROM quad_point_tbl;
|
||||
|
||||
CREATE INDEX sp_kd_ind ON kd_point_tbl USING spgist (p kd_point_ops);
|
||||
|
||||
CREATE TABLE suffix_text_tbl AS
|
||||
CREATE TABLE radix_text_tbl AS
|
||||
SELECT name AS t FROM road WHERE name !~ '^[0-9]';
|
||||
|
||||
INSERT INTO suffix_text_tbl
|
||||
INSERT INTO radix_text_tbl
|
||||
SELECT 'P0123456789abcdef' FROM generate_series(1,1000);
|
||||
INSERT INTO suffix_text_tbl VALUES ('P0123456789abcde');
|
||||
INSERT INTO suffix_text_tbl VALUES ('P0123456789abcdefF');
|
||||
INSERT INTO radix_text_tbl VALUES ('P0123456789abcde');
|
||||
INSERT INTO radix_text_tbl VALUES ('P0123456789abcdefF');
|
||||
|
||||
CREATE INDEX sp_suff_ind ON suffix_text_tbl USING spgist (t);
|
||||
CREATE INDEX sp_radix_ind ON radix_text_tbl USING spgist (t);
|
||||
|
||||
--
|
||||
-- Test GiST and SP-GiST indexes
|
||||
@ -194,31 +194,31 @@ SELECT count(*) FROM quad_point_tbl WHERE p >^ '(5000, 4000)';
|
||||
|
||||
SELECT count(*) FROM quad_point_tbl WHERE p ~= '(4585, 365)';
|
||||
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t = 'P0123456789abcdef';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t = 'P0123456789abcdef';
|
||||
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t = 'P0123456789abcde';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t = 'P0123456789abcde';
|
||||
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t = 'P0123456789abcdefF';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t = 'P0123456789abcdefF';
|
||||
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t < 'Aztec Ct ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t < 'Aztec Ct ';
|
||||
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t ~<~ 'Aztec Ct ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t ~<~ 'Aztec Ct ';
|
||||
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t <= 'Aztec Ct ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t <= 'Aztec Ct ';
|
||||
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t ~<=~ 'Aztec Ct ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t ~<=~ 'Aztec Ct ';
|
||||
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t = 'Aztec Ct ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t = 'Aztec Ct ';
|
||||
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t = 'Worth St ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t = 'Worth St ';
|
||||
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t >= 'Worth St ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t >= 'Worth St ';
|
||||
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t ~>=~ 'Worth St ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t ~>=~ 'Worth St ';
|
||||
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t > 'Worth St ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t > 'Worth St ';
|
||||
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t ~>~ 'Worth St ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t ~>~ 'Worth St ';
|
||||
|
||||
-- Now check the results from plain indexscan
|
||||
SET enable_seqscan = OFF;
|
||||
@ -382,56 +382,56 @@ SELECT count(*) FROM kd_point_tbl WHERE p ~= '(4585, 365)';
|
||||
SELECT count(*) FROM kd_point_tbl WHERE p ~= '(4585, 365)';
|
||||
|
||||
EXPLAIN (COSTS OFF)
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t = 'P0123456789abcdef';
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t = 'P0123456789abcdef';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t = 'P0123456789abcdef';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t = 'P0123456789abcdef';
|
||||
|
||||
EXPLAIN (COSTS OFF)
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t = 'P0123456789abcde';
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t = 'P0123456789abcde';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t = 'P0123456789abcde';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t = 'P0123456789abcde';
|
||||
|
||||
EXPLAIN (COSTS OFF)
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t = 'P0123456789abcdefF';
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t = 'P0123456789abcdefF';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t = 'P0123456789abcdefF';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t = 'P0123456789abcdefF';
|
||||
|
||||
EXPLAIN (COSTS OFF)
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t < 'Aztec Ct ';
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t < 'Aztec Ct ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t < 'Aztec Ct ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t < 'Aztec Ct ';
|
||||
|
||||
EXPLAIN (COSTS OFF)
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t ~<~ 'Aztec Ct ';
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t ~<~ 'Aztec Ct ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t ~<~ 'Aztec Ct ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t ~<~ 'Aztec Ct ';
|
||||
|
||||
EXPLAIN (COSTS OFF)
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t <= 'Aztec Ct ';
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t <= 'Aztec Ct ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t <= 'Aztec Ct ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t <= 'Aztec Ct ';
|
||||
|
||||
EXPLAIN (COSTS OFF)
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t ~<=~ 'Aztec Ct ';
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t ~<=~ 'Aztec Ct ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t ~<=~ 'Aztec Ct ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t ~<=~ 'Aztec Ct ';
|
||||
|
||||
EXPLAIN (COSTS OFF)
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t = 'Aztec Ct ';
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t = 'Aztec Ct ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t = 'Aztec Ct ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t = 'Aztec Ct ';
|
||||
|
||||
EXPLAIN (COSTS OFF)
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t = 'Worth St ';
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t = 'Worth St ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t = 'Worth St ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t = 'Worth St ';
|
||||
|
||||
EXPLAIN (COSTS OFF)
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t >= 'Worth St ';
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t >= 'Worth St ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t >= 'Worth St ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t >= 'Worth St ';
|
||||
|
||||
EXPLAIN (COSTS OFF)
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t ~>=~ 'Worth St ';
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t ~>=~ 'Worth St ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t ~>=~ 'Worth St ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t ~>=~ 'Worth St ';
|
||||
|
||||
EXPLAIN (COSTS OFF)
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t > 'Worth St ';
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t > 'Worth St ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t > 'Worth St ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t > 'Worth St ';
|
||||
|
||||
EXPLAIN (COSTS OFF)
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t ~>~ 'Worth St ';
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t ~>~ 'Worth St ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t ~>~ 'Worth St ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t ~>~ 'Worth St ';
|
||||
|
||||
-- Now check the results from bitmap indexscan
|
||||
SET enable_seqscan = OFF;
|
||||
@ -511,56 +511,56 @@ SELECT count(*) FROM kd_point_tbl WHERE p ~= '(4585, 365)';
|
||||
SELECT count(*) FROM kd_point_tbl WHERE p ~= '(4585, 365)';
|
||||
|
||||
EXPLAIN (COSTS OFF)
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t = 'P0123456789abcdef';
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t = 'P0123456789abcdef';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t = 'P0123456789abcdef';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t = 'P0123456789abcdef';
|
||||
|
||||
EXPLAIN (COSTS OFF)
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t = 'P0123456789abcde';
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t = 'P0123456789abcde';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t = 'P0123456789abcde';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t = 'P0123456789abcde';
|
||||
|
||||
EXPLAIN (COSTS OFF)
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t = 'P0123456789abcdefF';
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t = 'P0123456789abcdefF';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t = 'P0123456789abcdefF';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t = 'P0123456789abcdefF';
|
||||
|
||||
EXPLAIN (COSTS OFF)
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t < 'Aztec Ct ';
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t < 'Aztec Ct ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t < 'Aztec Ct ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t < 'Aztec Ct ';
|
||||
|
||||
EXPLAIN (COSTS OFF)
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t ~<~ 'Aztec Ct ';
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t ~<~ 'Aztec Ct ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t ~<~ 'Aztec Ct ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t ~<~ 'Aztec Ct ';
|
||||
|
||||
EXPLAIN (COSTS OFF)
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t <= 'Aztec Ct ';
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t <= 'Aztec Ct ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t <= 'Aztec Ct ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t <= 'Aztec Ct ';
|
||||
|
||||
EXPLAIN (COSTS OFF)
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t ~<=~ 'Aztec Ct ';
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t ~<=~ 'Aztec Ct ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t ~<=~ 'Aztec Ct ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t ~<=~ 'Aztec Ct ';
|
||||
|
||||
EXPLAIN (COSTS OFF)
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t = 'Aztec Ct ';
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t = 'Aztec Ct ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t = 'Aztec Ct ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t = 'Aztec Ct ';
|
||||
|
||||
EXPLAIN (COSTS OFF)
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t = 'Worth St ';
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t = 'Worth St ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t = 'Worth St ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t = 'Worth St ';
|
||||
|
||||
EXPLAIN (COSTS OFF)
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t >= 'Worth St ';
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t >= 'Worth St ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t >= 'Worth St ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t >= 'Worth St ';
|
||||
|
||||
EXPLAIN (COSTS OFF)
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t ~>=~ 'Worth St ';
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t ~>=~ 'Worth St ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t ~>=~ 'Worth St ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t ~>=~ 'Worth St ';
|
||||
|
||||
EXPLAIN (COSTS OFF)
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t > 'Worth St ';
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t > 'Worth St ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t > 'Worth St ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t > 'Worth St ';
|
||||
|
||||
EXPLAIN (COSTS OFF)
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t ~>~ 'Worth St ';
|
||||
SELECT count(*) FROM suffix_text_tbl WHERE t ~>~ 'Worth St ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t ~>~ 'Worth St ';
|
||||
SELECT count(*) FROM radix_text_tbl WHERE t ~>~ 'Worth St ';
|
||||
|
||||
RESET enable_seqscan;
|
||||
RESET enable_indexscan;
|
||||
|
Loading…
x
Reference in New Issue
Block a user