mysql:复合索引与多索引(最左边的索引前缀)

hvvq6cgz  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(368)

我们有一个目前正在使用复合(即多列)索引的表。
比如说

PRIMARY KEY(A, B)

当然,我们可以单独基于a(最左边的索引前缀)快速搜索,如果我们想单独基于b高效地搜索,我们需要为b创建一个单独的索引。
我的问题是如果我在做:

PRIMARY KEY (B)

保留有什么价值吗

PRIMARY KEY (A,B)

换言之,有什么好处吗

PRIMARY KEY (A,B)

如果我有

PRIMARY KEY (A)

以及

PRIMARY KEY (B)
qgzx9mmu

qgzx9mmu1#

你不能有多个主键,所以我假设你真的在问一个普通的索引。
如果你有索引 (A, B) ,它将用于同时使用两列的查询,如:

WHERE A = 1 AND B = 2

以及只使用 A :

WHERE A = 3

但是如果你有一个查询 B ,例如。

WHERE B = 4

它将根本无法使用索引。如果需要优化这些查询,还应该在 B . 所以你可能有:

UNIQUE KEY (A, B)
INDEX (B)
k2arahey

k2arahey2#

你错过了一个关于 PRIMARY KEY --根据定义(至少在mysql中是这样), UNIQUE . 并且没有比使pk唯一所需的更多的列。
如果 B ,独自一人 is unique, then have 主键(b)主键定义中没有任何其他列。 如果A` 也是独一无二的,那就做吧

PRIMARY KEY(B),
UNIQUE(A)

或者交换。
有关创建索引的详细讨论,请参阅我的食谱。
如果这两个列都是“唯一的”,那么您可能需要

PRIMARY KEY(A, B),
INDEX(B)

PRIMARY KEY(B, A),
INDEX(A)

直到你得到 SELECTs ,很难知道要创建什么索引。

相关问题