我现在正在研究如何为我们的表创建索引。
我发现了多个on索引,但我不确定会产生什么影响。示例:
我们在findById、findByIdAndStatus、findByResult上有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)
提前谢谢你!
发布于 2020-04-24 12:34:21
为所有人创建一个索引和创建不同的索引将对查询产生完全不同的影响。
索引基本上是平衡的二叉树。多色索引将按id对行进行索引,然后按id's排序的行按状态进行进一步的索引,然后再按结果进行索引,等等。您可以看到,在这个索引中,通过状态排序根本不存在。它只在id的第一个索引行上可用。
一定要看视频,它解释得很好。
发布于 2020-04-24 12:43:15
你读到的经验法则是错误的。
一个更好的规则是:创建这样一个索引的前提是,它很有用,并且经常被使用,因此值得对每个索引进行数据修改。
(a, b, c)上的多列B树索引在一些情况下很有用:
<operator>是索引所支持的运算符,而$1、$2和$3是常量。ORDER BY子句中的任何修饰都必须反映在CREATE INDEX语句中。例如,对于ORDER BY b, c DESC,必须在(a, b, c DESC)或(a, b DESC, c)上创建索引(索引可以双向读取)。VACUUM,这可以使您只进行索引扫描,因为所有必需的信息都在索引中。
在最近的PostgreSQL版本中,这样的索引更好地创建为
在标签上创建索引(a,b),包括(c);https://stackoverflow.com/questions/61408317
复制相似问题