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

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, these 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 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 this, writes to the table will be slower because the index has to be kept in sync all the time.

In other words, if you insert into a table featuring 20 indexes, you also have to keep in mind that we have to write to all those indexes on INSERT, which seriously slows down the writing.

主站蜘蛛池模板: 湘潭市| 揭东县| 青阳县| 白沙| 梅河口市| 呼伦贝尔市| 建阳市| 如皋市| 锡林郭勒盟| 泰顺县| 屯门区| 郧西县| 永修县| 冕宁县| 水城县| 邯郸县| 娄烦县| 从江县| 满洲里市| 毕节市| 鹤峰县| 敦化市| 镇安县| 大悟县| 泊头市| 鲁山县| 玉屏| 龙江县| 海宁市| 富锦市| 依兰县| 河津市| 尉氏县| 临邑县| 上林县| 泽普县| 呼图壁县| 尼勒克县| 精河县| 岑溪市| 无为县|