postgres执行计划 seqscan,indexscan,bitmapscan实验性分析

本文通过实验分析了Postgres中的seqscan、indexscan和bitmapscan三种执行计划。在数据量较小的情况下,Postgres倾向于全表扫描加filter,但随着数据量增大,会转向使用索引。vacuum命令会影响统计信息,从而影响执行计划的选择。当创建索引后,执行计划可能会因成本计算而改变。插入大量数据后,reltuples值未更新,但Postgres能根据某些原则智能选择执行计划。文章提出了关于成本计算和垃圾索引影响执行计划的问题,有待进一步研究。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

执行以下代码
create table t1(c1 int4);
insert into t1 select generate_series(1,10);
explain analyze select * from t1 where  c1 =4

显示为

"Seq Scan on t1  (cost=0.00..40.00 rows=12 width=4) (actual time=0.007..0.007 rows=1 loops=1)"
"  Filter: (c1 = 4)"
"Total runtime: 0.022 ms"

这本没有什么问题,现在加上索引

create index t1_index on t1 (c1);
explain analyze select * from t1 where  c1 =4

 显示依然为 

"Seq Scan on t1  (cost=0.00..1.13 rows=1 width=4) (actual time=0.013..0.015 rows=1 loops=1)"
"  Filter: (c1 = 4)"
"Total runtime: 0.050 ms"

执行计划并未改变依然为全表扫描加filter!

那索引目的何在?使用如下代码强制走索引测试

SET enable_seqscan TO off;
SET enable_indexscan TO on;
explain ana
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值