oracle综合指数最佳实践

问题描述 投票:0回答:1

我有一个表计算(id,客户,日期,类型,金额,公司,销售额...) 我有一个关于 date= 的 where 条件的查询?并输入=? 列类型只能有 3 个值:A、B 和 C(其中 85% 的值是 A、10% B 和 5% C) 创建复合索引时的最佳顺序是什么:(日期,类型)或(类型,日期)? (如果我的查询在 type=C 上进行过滤,那么使用索引(类型,日期)是否更好,以便该类型已经过滤掉 95% 的行)

oracle indexing query-optimization composite-index
1个回答
0
投票

我建议

(type,date)
,因为您不太可能总是在日期列上放置相等谓词 (
=
)。如果索引以
date
开头,并且您对其执行了非等式谓词(
<
>
between
等),那么您将失去在任何后续列上查找的能力 (
type 
)。如果您有其他仅按日期过滤的查询,那么您当然需要单独针对 date 建立
additional
索引。

另一方面,如果您知道您几乎总是在日期列上使用相等谓词(

=
),那么无论哪种方式都不会产生明显的差异。但是,由于您可能会发出一个对
date
进行过滤但对 type 进行过滤而不是
 的查询,因此在这种情况下,您可能会考虑 
(date,type)
 不必创建两个索引,而让一个索引满足这两个目的。 

对于串联索引列顺序,最重要的是查询模式,而不是基数。

© www.soinside.com 2019 - 2024. All rights reserved.