PostgreSQL仅对一行执行Seq扫描而不是索引扫描

时间:2019-10-17 08:01:54

标签: postgresql query-optimization sql-execution-plan

我正在使用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)"

如何获取索引扫描?

0 个答案:

没有答案