【问题标题】:usage of b-tree index for multiple columns in the table对表中的多个列使用 b-tree 索引
【发布时间】:2019-01-09 10:04:57
【问题描述】:

据我所知,数据库中最常见的索引之一是使用b-tree 的索引。

如果我有整数列的索引

column1 column2
   2     name2
   3     name3
   1     name4

它可能会创建如下所示的索引

 2
| |
1 3

如果我使用column2,它可能会像这样创建它

   name2
 |      |
name1 name3

但是如果我有一个包含两个字段的复合索引,那么它将如何排序呢?是否只对两列进行基本比较?

数据库对索引结构还有其他一些优化吗?

【问题讨论】:

  • 您使用的是哪个 dbms? (这是一个特定于产品的问题,因为产品实现索引的方式不同。)
  • @jarlh ho,所以取决于供应商,b-tree 索引可能会有所不同?我认为所有人都使用相同的算法
  • @jarlh 我对所有 dbms 的一般概述感兴趣。虽然我自己使用 postgres
  • 好吧,也许他们有。最好从了解 Postgresql 的人那里得到答案。
  • @jarlh 我并不特别关心供应商。我只想看看它是如何实现的,不管 dbms

标签: sql database postgresql indexing


【解决方案1】:

多个键都在索引中一起使用:

     2,name2
     |     |
1,name4  3,name3

比较是在第一个键上进行的。只有在平局的情况下,才会使用下一个键。因此,如果所有数字都相同,您将拥有:

     2,name2
     |     |
2,name3  2,name4

【讨论】:

  • 那么如果我把2, name5放在第一种情况下,它会向右发送到3, name3leaf?
  • 如果你有2, name5,那么“2”是相等的,name5 > name2 所以它会向右。
  • 我明白了。但最后它基本上是从原始表中引用的一个单独的结构?
  • @lapots 。 . .是的。 Postgres 甚至不支持聚集索引,所以结构总是分开的。在支持聚集索引的数据库中,聚集索引的叶节点是数据页。但索引的实际层次结构始终与数据分开。
  • 所以层次结构是一个单独的实体?我认为它将所有内容存储为一个单一的结构
猜你喜欢
  • 2011-04-12
  • 2015-05-08
  • 2020-12-14
  • 1970-01-01
  • 2011-09-26
  • 2011-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多