【发布时间】:2023-04-01 02:25:01
【问题描述】:
我是 Postgres 的新手,如果我有多个如下定义的 btree 索引,我对 Postgres 如何决定使用哪个索引有点困惑。
CREATE INDEX index_1 ON sample_table USING btree (col1, col2, COALESCE(col3, 'col3'::text));
CREATE INDEX index_2 ON sample_table USING btree (col1, COALESCE(col3, 'col3'::text));
当我写入 sample_table(来自源表)时,我在联接条件中使用 col1, col2, COALESCE(col3, 'col3'::text) 但是当我进行解释分析以获取查询计划时,我有时会看到它使用 index_2 而不是 index_1 进行扫描,有时只使用顺序扫描。我想了解什么可以使 Postgres 使用一个索引而不是另一个索引?
【问题讨论】:
-
简而言之:优化器评估不同的策略并为每个策略分配一个成本值。然后选择成本最低的那个。有关更多说明,请参阅Using EXPLAIN
-
感谢@a_horse_with_no_name,您的解释
标签: postgresql query-performance database-indexes