【发布时间】:2021-04-29 19:06:15
【问题描述】:
我正在为 PostgreSQL 数据库创建索引。我想知道用于在 PostgreSQL 语句中对结果进行排序的列是否应包含在索引中。
假设我在 PostgreSQL 数据库中创建了一个标签为“table1”的表,其中列标签为“col1”、“col2”和“col3”。
我想执行以下查询:
SELECT * FROM table1 WHERE col1 = 'word1' AND col2 = 'word2' ORDER BY col3;
我知道这个搜索的索引应该包括WHERE 子句中引用的所有列,所以在这种情况下,索引应该包括 col1 和 col2。
索引也应该包含 col3 吗?
【问题讨论】:
-
是的,但在索引键中的其他两列之后。想一想:您希望引擎在
col1, col2上进行点查找,然后按col3对结果进行排序。如果您使用不等式><><=等,这将完全改变 -
谢谢。那么这是否意味着我应该为 col3 创建一个单独的索引,或者只是它应该是同一索引的最终属性?
-
后者。如果您的版本支持,则此顺序具有键列的一个索引
col1, col2, col3不要忘记include (other_columns)。并且不要使用select *,如果可以,请指定您需要的列。 -
非常感谢!目前在开发中只使用 *,因为我稍后会添加列。
标签: sql database postgresql indexing sql-order-by