官术网_书友最值得收藏!

  • Mastering PostgreSQL 9.6
  • Hans Jurgen Schonig
  • 210字
  • 2021-07-09 19:57:15

Deploying simple indexes

Firing up more worker processes to scan ever larger tables is sometimes not the solution. Reading entire tables to find just a single row is usually not a good idea. Therefore, it makes sense to create indexes:

test=# CREATE INDEX idx_id ON t_test (id); 
CREATE INDEX
test=# SELECT * FROM t_test WHERE id = 43242;
id | name
-------+------
43242 | hans
(1 row)
Time: 0.259 ms

PostgreSQL uses Lehman-Yao's high concurrency B-tree for standard indexes. Along with some PostgreSQL specific optimizations, those trees provide end users with excellent performance. The most important thing is that Lehman-Yao allows you to run many operations (reading and writing) on the very same index at the same time, which helps to improve throughput dramatically.

However, indexes are not for free:

test=# \di+ 
List of relations
Schema | Name | Type | Owner | Table | Size | Description
--------+--------+-------+-------+--------+-------+-------------
public | idx_id | index | hs | t_test | 86 MB |
(1 row)

As you can see, our index containing 4 million rows will eat up 86 MB of disk space. In addition to that, writes to the table will be slower because the index has to be kept in sync all the time.

主站蜘蛛池模板: 开平市| 建湖县| 务川| 宝山区| 乐山市| SHOW| 大邑县| 宣汉县| 同心县| 北宁市| 青神县| 云南省| 宁波市| 和政县| 贵定县| 庐江县| 威信县| 孟津县| 丰县| 南陵县| 铜川市| 天峨县| 南阳市| 大厂| 神木县| 呼图壁县| 泸西县| 兰坪| 莱阳市| 陆丰市| 大荔县| 宽甸| 绥江县| 塔河县| 北海市| 定安县| 娱乐| 罗江县| 饶阳县| 富顺县| 隆回县|