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
为所有创建一个索引和创建不同的索引对查询的影响完全不同。
您可以使用 EXPLAIN 查看索引是否用于查询。
这个视频非常适合了解数据库索引。
索引 CREATE INDEX CONCURRENTLY ON 仅当查询在 WHERE 子句中使用 id、(id、status) 或 (id、status 和 result) 时,才会使用 Students (id, status, result)。状态为Where 的查询根本不会使用该索引。
索引基本上是平衡二叉树。多列索引将按 id 索引行,然后按 id 排序的行进一步按状态索引,然后是结果索引,依此类推。您可以看到,在此索引中,根本不存在通过状态排序的情况。它仅适用于由 id 的第一个索引的行。
请观看视频,它很好地解释了这一切。