Sql 对表中的多个列使用b树索引

Sql 对表中的多个列使用b树索引,sql,database,postgresql,indexing,Sql,Database,Postgresql,Indexing,据我所知,数据库中最常见的索引之一是使用b-tree的索引 如果我有整数列的索引 column1 column2 2 name2 3 name3 1 name4 它可能会创建如下所示的索引 2 | | 1 3 name2 | | name1 name3 如果我使用column2它可能会这样创建 2 | | 1 3 name2 | | name1 name3 但是如果我有一个包含两个字段的复合索引,那么它将

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

如果我有整数列的索引

column1 column2
   2     name2
   3     name3
   1     name4
它可能会创建如下所示的索引

 2
| |
1 3
   name2
 |      |
name1 name3
如果我使用
column2
它可能会这样创建

 2
| |
1 3
   name2
 |      |
name1 name3
但是如果我有一个包含两个字段的复合索引,那么它将如何排序呢?它只会与两列进行基本比较吗


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

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

     2,name2
     |     |
1,name4  3,name3
在第一个键上进行比较。只有在领带的情况下,才能使用下一个键。因此,如果所有的数字都相同,您会:

     2,name2
     |     |
2,name3  2,name4

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

     2,name2
     |     |
1,name4  3,name3
在第一个键上进行比较。只有在领带的情况下,才能使用下一个键。因此,如果所有的数字都相同,您会:

     2,name2
     |     |
2,name3  2,name4


您使用的是哪种数据库管理系统?(这是一个特定于产品的问题,因为产品实现索引的方式不同。)@jarlh ho,那么根据供应商的不同,b树索引可能会有所不同?我以为他们都用同样的东西algorithms@jarlh我对所有数据库管理系统的概述感兴趣。虽然我自己使用postgres很好,但也许他们会。更好的办法是从了解Postgresql的人那里得到答案。@jarlh我并不特别关心供应商。我只想看看它在一般情况下是如何实现的,而不管您使用的是哪种dbms?(这是一个特定于产品的问题,因为产品实现索引的方式不同。)@jarlh ho,那么根据供应商的不同,b树索引可能会有所不同?我以为他们都用同样的东西algorithms@jarlh我对所有数据库管理系统的概述感兴趣。虽然我自己使用postgres很好,但也许他们会。更好的办法是从了解Postgresql的人那里得到答案。@jarlh我并不特别关心供应商。我只是想看看它是如何实现的,如果我把
2,name5
放在第一个例子中,它会把它发送到右边的
3,name3
leaf?如果你有
2,name5
,那么“2”是相等的,而
name5
name2
,那么它会转到右边。我明白了。但最终它基本上是一个独立的结构,从原始表中引用?@lapots。对Postgres甚至不支持聚集索引,因此结构总是独立的。在支持聚集索引的数据库中,聚集索引的叶节点是数据页。但是索引的实际层次结构总是与数据分开的。那么层次结构是一个单独的实体吗?我认为它将所有内容存储为单个结构,因此如果我将
2,name5
放在第一个案例中,它会将它发送到右侧的
3,name3
leaf?如果您有
2,name5
,那么“2”是相等的,而
name5
name2
,那么它将转到右侧。我明白了。但最终它基本上是一个独立的结构,从原始表中引用?@lapots。对Postgres甚至不支持聚集索引,因此结构总是独立的。在支持聚集索引的数据库中,聚集索引的叶节点是数据页。但是索引的实际层次结构总是与数据分开的。那么层次结构是一个单独的实体吗?我以为它把所有东西都存储为一个结构