Clustering on an index
PostgreSQL supports clustering a table using an index. CLUSTER
is used to do that. What does it do? It reorganizes the table based on the index. Why do we need it? It can greatly increase performance when you query a range of index values or a single index value with multiple entries because the queried data is in one place on the disk.
The syntax is as follows:
CLUSTER [VERBOSE] table_name [ USING index_name ]
Here's an example of how to create a cluster and how it improves the performance:
CREATE TABLE table_cluster( id integer, name varchar); INSERT INTO table_cluster VALUES(generate_series(1,10000000), 'test_name'||generate_series(1,10000000)); CREATE INDEX table_cluster_idx ON table_cluster(id);
Query the table in such way that the index is used and look at the execution time. The following is an example:
postgres=# EXPLAIN ANALYZE SELECT * FROM table_cluster WHERE id BETWEEN 10000 AND 200000; QUERY PLAN -----------------------------...