Oracle多列索引多列或多个索引更好



当考虑oracle中的多列索引时,在索引中放入更多列比放入更少列好吗。即,我有一个超过20列的表,选项a是用col_1、col_2、col_3创建index_1a,用col_1,col_4、col_5创建index_1b。可以用col1、col2、col4添加更多的index_1c选项B是使用col_1、col_2、col_3、col_4、col_5 创建index_B

我有很多查询用不同的col组合搜索,

  • 有时col_1和col_2
  • 有时col1和col4
  • 有时col1、col2和col4

我该怎么办?你们能多解释一下吗?

Oracle实现了跳过扫描索引操作,这里对此进行了解释。

因此,在(col_1, col_2, col_4)(col_1, col_4, col_2)上有一个单独的索引可能就足够了。您应该测试性能是否足以满足您的目的,但单个索引很有可能满足您的需求。

Oracle通常不会组合多个索引(假设问题与b*树索引有关,而与位图索引无关(-大多数时候优化器只使用最合适的索引。在你的例子中,第一个问题是条件的选择性有多强:如果col_1是非常有选择性的,那么可能仅仅在col_1上有一个索引就足够了。如果只有条件的组合提供了良好的选择性,那么可能有必要创建多个索引——在这种情况下,您可以在示例中以(col_1,col_2,col_4(和(col_1、col_4(结束。如果第二个示例查询只有索引(col_1,col_2,col_4(,我希望优化器只使用col_1作为访问谓词,col_4作为筛选谓词。当然,当DML发生时,添加多个索引会增加索引维护工作的成本。

使用位图索引,优化器可以将它们组合在一起,但这种索引类型通常只用于数据仓库,因为它给并发DML带来了巨大的锁定问题。

最新更新