database - 在 PostgreSQL 中创建多列索引

标签 database postgresql

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

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

我们在 findByIdfindByIdAndStatusfindByResult 上有 SQL。

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

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

在学生(id、状态、结果)上同时创建索引

对比

这个:(针对不同的查询创建不同的索引)

在学生 (id) 上同时创建索引

在学生(id,status)上同时创建索引

同时为学生创建索引(结果)

提前致谢!

最佳答案

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

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

  2. This video了解数据库索引真的很好。

  3. 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/

相关文章:

database - sqlite & flex - 如果不存在则插入?

c# - 在 MVC 应用程序中使用 Webmatrix.Database Helper 的优点和缺点

sql - Postgresql 如何将两个数组列拆分并映射为单独的列

ruby-on-rails - Ruby on Rails 中 Postgresql 的线性同余生成器,用于生成唯一的、不重复的随机数?

postgresql - 无法将 aurora-postgresql 从 9.6.9 升级到 10.7

php - Mysql 子查询连接表

database - 有哪些适用于 Linux 且可与 SQLAlchemy 配合使用的优秀免费数据建模程序?

swift - (Xcode 6 Swift Language)保存用户数据(用户名、用户电子邮件、用户密码)并将其发送到数据库

ruby-on-rails - 为什么 Postgres DUMP 数据数据库连接在 Amazon RDS 上丢失?

arrays - Postgres 将数组转换为自定义类型