PostgreSQL index scan,bitmap index scan区别

PostgreSQL index scan,bitmap index scan区别,第1张

概述1. 建表 postgres=# create table tb_index_test(id serial primary key,name character varying);CREATE TABLE postgres=# postgres=# \d tb_index_test; Table "public.tb_index_t 1. 建表
postgres=# create table tb_index_test(ID serial primary key,name character varying);CREATE table postgres=# postgres=# \d tb_index_test;                              table "public.tb_index_test" Column |       Type        |                         ModifIErs                          --------+-------------------+------------------------------------------------------------ ID     | integer           | not null default nextval('tb_index_test_ID_seq'::regclass) name   | character varying | Indexes:    "tb_index_test_pkey" PRIMARY KEY,btree (ID)
2. 插入测试数据:
 postgres=# insert into tb_index_test values(generate_serIEs(1,10000),'john');INSERT 0 10000
3. 区别一、启动成本
> index sacn: 因为需要扫描索引块,节点才能输出,索引启动成本大于0
postgres=# explain(analyze,verbose,buffers)select count(0) from tb_index_test where ID<400;                                                                     query PLAN                                                                     ---------------------------------------------------------------------------------------------------------------------------------------------------- Aggregate  (cost=22.29..22.30 rows=1 wIDth=0) (actual time=0.108..0.108 rows=1 loops=1)   Output: count(0)   Buffers: shared hit=6   ->  Index Scan using tb_index_test_pkey on public.tb_index_test  (<span >cost=0.29</span>..21.29 rows=400 wIDth=0) (actual time=0.016..0.074 rows=399 loops=1)         Output: ID,name         Index Cond: (tb_index_test.ID < 400)         Buffers: shared hit=6 Total runtime: 0.140 ms(8 rows)Time: 0.620 ms
> bitmap index scan: 因为需要扫描索引块,节点才能放输出,索引启动成本也大于0,但是bitmap index scan的启动成本却是0,可以解释为bitmAPIndex Scan节点和Bitmap Heap Scan是一对的,启动成本算在Bitmap Heap Scan上.
postgres=# explain(analyze,buffers)select count(0) from tb_index_test where ID<400;                                                              query PLAN                                                              -------------------------------------------------------------------------------------------------------------------------------------- Aggregate  (cost=72.39..72.40 rows=1 wIDth=0) (actual time=0.178..0.178 rows=1 loops=1)   Output: count(0)   Buffers: shared hit=6   ->  Bitmap Heap Scan on public.tb_index_test  (cost=11.38..71.39 rows=400 wIDth=0) (actual time=0.062..0.120 rows=399 loops=1)         Output: ID,name         Recheck Cond: (tb_index_test.ID < 400)         Buffers: shared hit=6         ->  Bitmap Index Scan on tb_index_test_pkey  (c<span >ost=0.00</span>..11.29 rows=400 wIDth=0) (actual time=0.047..0.047 rows=399 loops=1)               Index Cond: (tb_index_test.ID < 400)               Buffers: shared hit=3 Total runtime: 0.217 ms(11 rows)Time: 0.741 ms
4. 区别二、节点返回的类型
index scan: 输出的是tuple,它先扫描索引块,然后得到rowID扫描数据块得到目标记录。
bitmap index scan; 输出的是索引条目,并不是行的数据,输出索引条目后,交给上一个几点 bitmap heap scan(之间可能将索引条目根据物理排列顺序进行排序)。

以上参考自 德哥 的教程

5. 区别三、扫描索引块和数据块的区别。
index scan: 一次只读一条索引项,那么一个 PAGE面有可能被多次访问;
bitmap index scan : 一次性将满足条件的索引项全部取出,然后交给bitmap heap scan节点,并在内存中进行排序,根据取出的索引项访问表数据。
参考自:http://francs3.blog.163.com/blog/static/405767272011665227181/ 总结

以上是内存溢出为你收集整理的PostgreSQL index scan,bitmap index scan区别全部内容,希望文章能够帮你解决PostgreSQL index scan,bitmap index scan区别所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1176235.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存