我有一个名为account_id
的整数列的表。我有一个索引。
但似乎Postgres不想使用我的索引:
EXPLAIN ANALYZE SELECT "invoices".* FROM "invoices" WHERE "invoices"."account_id" = 1;
Seq Scan on invoices (cost=0.00..6504.61 rows=117654 width=186) (actual time=0.021..33.943 rows=118027 loops=1)
Filter: (account_id = 1)
Rows Removed by Filter: 51462
Total runtime: 39.917 ms
(4 rows)
知道为什么会这样吗?
答案 0 :(得分:8)
因为:
Seq Scan on invoices (...) (actual ... rows=118027 <— this
Filter: (account_id = 1)
Rows Removed by Filter: 51462 <— vs this
Total runtime: 39.917 ms
你选择了这么多行,读取整个表格会更便宜。
今天相关的早期问题和答案供进一步阅读:
(另请参阅Craig在第二篇上的更长答案,了解有关索引细微之处的其他说明。)