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

  • Mastering PostgreSQL 9.6
  • Hans Jurgen Schonig
  • 272字
  • 2021-07-09 19:57:16

Making use of index only scans

So far, you have seen when an index is used and when it is not. In addition to that, bitmap scans have been discussed.

However, there is more to indexing. The following two examples will only differ slightly although the performance difference might be fairly large. Here is the first query:

test=# EXPLAIN SELECT * FROM t_test WHERE id = 34234; 
QUERY PLAN
----------------------------------------------------------------
Index Scan using idx_id on t_test
(cost=0.43..8.45 rows=1 width=9)
Index Cond: (id = 34234)

There is nothing unusual here. PostgreSQL uses an index to find a single row. What happens if only a single column is selected?

test=# EXPLAIN SELECT id FROM  t_test WHERE id = 34234;
QUERY PLAN
----------------------------------------------------------------
Index Only Scan using idx_id on t_test
(cost=0.43..8.45 rows=1 width=4)
Index Cond: (id = 34234)
(2 rows)

As you can see, the plan has changed from an index scan to a so called index only scan. In our example, the id column has been indexed so its content is naturally in the index. There is no need to go to the table in most cases if all the data can already be taken out of the index. Going to the table is (almost) only required if additional fields are queried, which is not the case here. Therefore, the index-only scan will promise significantly better performance than a normal index scan.

Practically, it can even make sense to include an additional column into an index here and there to enjoy the benefit of this feature. In MS SQL, adding additional columns is known as covering indexes. Similar behavior can be achieved in PostgreSQL as well.

主站蜘蛛池模板: 花垣县| 贵港市| 南宁市| 新竹市| 军事| 石屏县| 桓仁| 阿克陶县| 日土县| 江油市| 崇义县| 丹东市| 麻栗坡县| 石渠县| 玉山县| 武山县| 龙口市| 曲松县| 阜阳市| 海晏县| 托里县| 远安县| 九台市| 陵水| 通山县| 措美县| 内丘县| 平顶山市| 富蕴县| 伊宁市| 呼玛县| 济源市| 唐河县| 巫溪县| 日喀则市| 偏关县| 东乌珠穆沁旗| 黄大仙区| 丘北县| 平昌县| 万山特区|