首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多列索引与多索引/索引合并

多列索引与多索引/索引合并
EN

Stack Overflow用户
提问于 2013-02-21 15:37:21
回答 1查看 497关注 0票数 1

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

让我们假设我们有几个查询,它们将对这些列进行联接或执行子句:

代码语言:javascript
复制
Q1: Where A = ?
Q2: Where A = ?, B = ?
Q3: Where A = ?, B = ?, C = ?

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

索引合并:

代码语言:javascript
复制
Idx1: Create index A_idx ON table (A)
Idx2: Create index B_idx ON table (B)
Idx3: Create index C_idx ON table (C)

多个索引

代码语言:javascript
复制
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列,这些列将以不同的方式和组合连接在一起。是否最好为他们将收到的这些组合创建多个列索引?或者只是找到最常用的多列的最小集合,在这些列上构建多列索引,然后为其余列创建单独的索引?

EN

回答 1

Stack Overflow用户

发布于 2013-02-21 15:44:15

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

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

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

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14996911

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档