我正在使用PostgreSQL 9.5.19。
我有一个简单的SQL语句,正在执行一个查询,该查询在只有10行的表上返回1行。
EXPLAIN
SELECT * FROM table_a a
WHERE a.col_a ='a';
返回
"Seq Scan on table_a a (cost=0.00..1.12 rows=1 width=524)"
" Filter: ((col_a)::text = 'a'::text)"
问题
为什么使用Seq扫描而不使用索引扫描?
我认为只进行一行扫描就可以了。
更多信息:
我将表更改为只有2行,因此结果集将是行的50%,并且仍然进行了Seq扫描。我也将其更改为具有100行,但仍使用Seq扫描。
该表格确实具有以下索引(删除索引没有区别):
CREATE INDEX idx_a
ON table_a
USING btree
(col_a);
更新:
如果我将表中的行数增加到100000,它将进行位图堆扫描。
"Bitmap Heap Scan on table_a a (cost=4.66..119.19 rows=30 width=25)"
如何获取索引扫描?