在 PostgreSQL 中创建多列索引

men*_*eng 6 database postgresql

我现在正在研究为我们的表创建索引。

我发现了多列索引,但我不确定其影响。例子:

我们有关于findById, findByIdAndStatus,的 SQL findByResult

它表示最常用的WHERE应该在列列表中首先列出。但我想知道如果我在不同的组合 where 子句上创建索引是否会产生巨大的影响。

这:(为所有人创建一个索引)

CREATE INDEX CONCURRENTLY ON Students (id, status, result)

这:(在不同的查询上创建不同的索引)

CREATE INDEX CONCURRENTLY ON Students (id)

CREATE INDEX CONCURRENTLY ON Students (status)

CREATE INDEX CONCURRENTLY ON Students (result)

提前非常感谢!

Mah*_*ori 12

为所有创建一个索引和创建不同的索引对查询的影响完全不同。

  1. 您可以使用 EXPLAIN 查看索引是否用于查询。

  2. 这个视频非常适合了解数据库索引。

  3. 索引 CREATE INDEX CONCURRENTLY ON 仅当查询在 WHERE 子句中使用 id、(id、status) 或 (id、status 和 result) 时,才会使用 Students (id, status, result)。状态为Where 的查询根本不会使用该索引。

索引基本上是平衡二叉树。多列索引将按 id 索引行,然后按 id 排序的行进一步按状态索引,然后是结果索引,依此类推。您可以看到,在此索引中,根本不存在通过状态排序的情况。它仅适用于由 id 的第一个索引的行。

请观看视频,它很好地解释了这一切。