gpt4 book ai didi

sql - 数据库索引: why pairing

转载 作者:行者123 更新时间:2023-12-04 13:35:24 24 4
gpt4 key购买 nike

我有一个带有多个索引的表,其中有几个重复相同的列:

Index 1 columns: X, B, C, D
Index 2 columns: Y, B, C, D
Index 3 columns: Z, B, C, D

我对实践中的索引不是很了解,所以我想知道是否有人可以解释为什么X,Y和Z与这些相同的列配对。 B是生效日期。 C是此表在特定生效日期B的半唯一键ID。D是一个序列,用于标识该记录对标识符C的优先级。

为什么不只创建6个索引,每个索引分别对应X,Y,Z,B,C,D?

我想向另一列T添加索引,但是在某些情况下,我只会在T上单独查询,而在其他情况下,我还将指定B,C和D列...所以我应该只创建一个索引,例如以上还是我应该为T创建一个,为(T,B,C,D)创建一个?

谷歌搜索索引的全面介绍时,我的运气不如预期。有什么资源可以使我获得透彻的解释以及许多B树索引的示例?

最佳答案

使用索引的规则是,可以使用索引对构成该索引所用列前缀的任何列列表进行过滤。

换句话说,当我们对X和B或X,B和C或仅对X或全部四个进行过滤时,可以使用索引1。

但是,我们不能使用索引来过滤“中间”。这是因为索引的工作并不完全不同于为每一行连接那些列的值并对结果进行排序。如果知道要寻找的东西是什么,我们可以找出索引中要查找的位置-就像进行二进制搜索时一样。

这就是为什么单个索引不好的原因:如果我们需要对B,C,D以及X,Y和Z中的一个进行过滤,则需要三个索引。 X,Y不能作为仅对Y进行过滤的索引,因为我们所寻找的值的前缀-X-是未知的。

正如Daniel所提到的,覆盖索引是重复B,C和D的可能解释:即使D从未被过滤,也有可能我们确实需要索引中看到的列,然后我们可以只需从索引中读取列,而不是仅使用索引来定位行。

关于sql - 数据库索引: why pairing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2516614/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com