我现在正在研究如何为我们的表创建索引。
我发现了多列索引,但不确定其影响。 示例:
我们在 findById
、findByIdAndStatus
、findByResult
上有 SQL。
它表示在WHERE
上最常用的应该列在列列表的第一位。但是我想知道如果我在不同的组合 where 子句上创建索引是否会产生巨大的影响。
这:(为所有人创建一个索引)
在学生(id、状态、结果)上同时创建索引
对比
这个:(针对不同的查询创建不同的索引)
在学生 (id) 上同时创建索引
在学生(id,status)上同时创建索引
同时为学生创建索引(结果)
提前致谢!
最佳答案
为所有人创建一个索引和创建不同的索引对查询的影响是完全不同的。
您可以使用 EXPLAIN 查看索引是否被用于查询。
This video了解数据库索引真的很好。
Index CREATE INDEX CONCURRENTLY ON Students (id, status, result) 仅当查询在 WHERE 子句中使用 id、(id,status) 或 (id, status and result) 时使用。状态为 Where 的查询根本不会使用该索引。
索引基本上是平衡二叉树。多列索引将按 id 索引行,然后按 id 排序的行是按状态进一步索引,然后是结果等等。 您可以看到,在此索引中,根本不存在通过状态进行排序。它仅适用于由 id 的第一个索引的行。
一定要看看视频,它很好地解释了这一切。
关于database - 在 PostgreSQL 中创建多列索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61408317/