gpt4 book ai didi

mysql - 多列索引与多索引/索引合并

转载 作者:搜寻专家 更新时间:2023-10-30 23:15:18 24 4
gpt4 key购买 nike

假设我们有一个包含 4 列的表:A、B、C 和 D

假设我们有一些查询将针对这些列加入或执行子句:

Q1: Where A = ?
Q2: Where A = ?, B = ?
Q3: Where A = ?, B = ?, C = ?

既然我们知道我们将在三个不同的上下文中使用这些列,那么最好创建三个不同的索引吗?还是三个不同的多重索引?

索引合并:

Idx1: Create index A_idx ON table (A)
Idx2: Create index B_idx ON table (B)
Idx3: Create index C_idx ON table (C)

多重索引

Idx1: Create index A_idx ON table(A)
Idx2: Create index AB_idx ON table(A,B)
Idx3: Create index ABC_idx ON table(A,B,C)

这是一个简化的案例。假设我们有 10-15 列,它们将以不同的方式和组合连接或放在一起。最好为他们将收到的这些组合创建多个列索引吗?或者只是找到最常用的多列的最小集合,在这些列上构建多列索引,然后为其余的创建单独的索引?

最佳答案

(A,B,C) 上的复合索引将涵盖 3 个查询,因此您不需要 (A) 和 ON (A,B) 上的索引。它也比 index_merge 更快。

拥有多个索引的唯一原因是某些查询不会被索引覆盖(例如,它们包括 B 和 C,但不包括 A)

另请记住,决定是否应将列包含在索引中的列最重要的特征之一不是它是否在查询中使用,而是基数。如果对该列的查询不会排除很多行,则不应将其包含在索引中。

假设您有 A、B、C对于给定的 A 值,您有 20% 的行。从这些行中,对于给定的 B 值,您有 1% 的行。假设这些条件 (A,B) 从表中过滤 1000 行。应用 C 后,您会收到 850 行。 C 上的索引无效,(A,B) 是此查询的最佳索引

关于mysql - 多列索引与多索引/索引合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14996911/

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