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

Making use of index only scans

So far, you have seen when an index is used and when it is not. In addition to this, 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 an 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.

主站蜘蛛池模板: 井冈山市| 汝南县| 九江县| 清水河县| 鄂尔多斯市| 丹棱县| 金坛市| 卢氏县| 禄丰县| 莲花县| 贵定县| 琼海市| 南阳市| 黔东| 永川市| 北京市| 崇左市| 隆林| 蒲江县| 阳朔县| 桦甸市| 周口市| 鄯善县| 乐都县| 满洲里市| 大理市| 皮山县| 韩城市| 临潭县| 延庆县| 沙河市| 西和县| 阜康市| 兴海县| 鹤岗市| 汤原县| 崇明县| 新丰县| 铜梁县| 孟州市| 克什克腾旗|