Oracle表索引:1对多列

时间:2014-12-29 23:05:31

标签: sql oracle

希望这应该是一个非常简单的问题,但我无法在任何地方找到答案(尽管很难搜索)。

我有一个具有以下唯一约束的表

CONSTRAINT "MYTABLE_PK" PRIMARY KEY ("CUSTOMERID", "STOREID", "COUNTRYID") ENABLE

显然,如果我在连接中使用所有3个字段,它就可以作为一个索引,问题是如果我在查询中使用该表但只加入CUSTOMER_ID会发生什么?这会以相同的方式帮助提高性能,还是需要专门为CUSTOMER_ID创建索引?

1 个答案:

答案 0 :(得分:4)

是的,Oracle将使用包含更多列的索引,其方式与列数较少的索引相同(只要使用最左侧的列)。

对某些连接以及谓词或FK检查都是如此。

Oracle states

  

复合索引可加快使用索引前导部分的查询。

具有多列的索引有点大,因此它必须读取更多页面(或者需要在缓冲区缓存中保留更多页面)。但是,在多种情况下使用一个索引可以更好地保持倍数。

BTW:这是一个博客,显示匹配和失败的索引列的计划:http://use-the-index-luke.com/sql/where-clause/the-equals-operator/concatenated-keys