首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在PostgreSQL中创建多个索引

在PostgreSQL中创建多个索引
EN

Stack Overflow用户
提问于 2020-04-24 12:24:39
回答 2查看 2.1K关注 0票数 1

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

我发现了多个on索引,但我不确定会产生什么影响。示例:

我们在findByIdfindByIdAndStatusfindByResult上有SQL。

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

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

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

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

CREATE INDEX CONCURRENTLY ON Students (id)

CREATE INDEX CONCURRENTLY ON Students (id, status)

CREATE INDEX CONCURRENTLY ON Students (result)

提前谢谢你!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-24 12:34:21

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

  1. 您可以使用EXPLAIN来查看索引是否用于查询。
  2. 这段视频很好地了解了DB索引。
  3. 仅当查询在WHERE子句中使用id、(id、status )或(id、状态和结果)时,才会同时对学生(id、状态、结果)使用索引创建索引。状态为Where的查询将根本不使用此索引。

索引基本上是平衡的二叉树。多色索引将按id对行进行索引,然后按id's排序的行按状态进行进一步的索引,然后再按结果进行索引,等等。您可以看到,在这个索引中,通过状态排序根本不存在。它只在id的第一个索引行上可用。

一定要看视频,它解释得很好。

票数 2
EN

Stack Overflow用户

发布于 2020-04-24 12:43:15

你读到的经验法则是错误的。

一个更好的规则是:创建这样一个索引的前提是,它很有用,并且经常被使用,因此值得对每个索引进行数据修改。

(a, b, c)上的多列B树索引在一些情况下很有用:

  1. 如果查询如下所示: 选择。从a= $1和b= $2和c $3的选项卡 其中<operator>是索引所支持的运算符,而$1$2$3是常量。
  2. 如果查询如下所示: 选择。从a= $1和b= $2的选项卡中按c计算; 或者像这样 选择。A= $1按b,c订购; ORDER BY子句中的任何修饰都必须反映在CREATE INDEX语句中。例如,对于ORDER BY b, c DESC,必须在(a, b, c DESC)(a, b DESC, c)上创建索引(索引可以双向读取)。
  3. 如果查询如下所示: 从选项卡中选择c,其中a= $1,b= $2; 如果表是新编辑的VACUUM,这可以使您只进行索引扫描,因为所有必需的信息都在索引中。 在最近的PostgreSQL版本中,这样的索引更好地创建为 在标签上创建索引(a,b),包括(c);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61408317

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档