索引是否尽可能重叠?

时间:2015-06-29 20:53:41

标签: oracle oracle11g

假设我有一个包含2列的表我已经知道我永远不会在同一个查询中一起使用。所以,像:

BLACK | WHITE | C1 | C2 | C3 | B1 | B2 | B3 | ...

我也知道在大约80%的查询中,我会询问C1 C2和C3以及BLACK或WHITE中的一个。 如果我定义一个索引,如:

C1,C2,C3, BLACK

当我定义索引时

C1,C2,C3, WHITE

我会重复使用第一部分,包括C1,C2,C3吗?或者会创建一个全新的索引(及其相关的磁盘空间)?

另外,假设C1是具有最高dinstinct值的列(在我的DB中是日期时间列),将它放在第一位是否正确?或者,最好放置C3,假设C3是具有较少dinstinct值的那个?

1 个答案:

答案 0 :(得分:0)

  

我会重复使用第一部分,包括C1,C2,C3吗?或者会创建一个全新的索引(及其相关的磁盘空间)?

将有两个不同的索引占据两倍的数据页面(假设blackwhite具有相似的大小)

  

另外,假设C1是具有最高dinstinct值的列(在我的DB中它是一个日期时间列),将它放在第一位是否正确?或者,最好放置C3,假设C3是具有较少dinstinct值的那个?

这取决于您的查询。

索引可以用于过滤和排序。

如果您在C1, C2, C3上创建索引,则可以使用if对(C1)(C1, C2)(C1, C2, C3)中的任何一个进行过滤和/或排序。