我和一个同事刚接触Oracle,正在分析表上的索引。这是旧版,表上当前存在索引

Mytable
* ID      (primary key)
* partId  (Id column in part)
* partNum (partNum column in part...partNum can have more than one partId)
* description (description of partNum...can be different for each partNum)
* dateReceived

IDX_PART_ID_PART_NUM(partId, PartNum)
IDX_PART_NUM(partNum)
IDX_DATE_RECEIVED(dateReceived)


似乎索引中有冗余。我们应该从IDX_PART_ID_PART_NUM中删除partNum吗?我们应该删除IDX_PART_NUM吗?如上所述,partNum可以具有多个id,因为每个部分在一个对象中可以存在多个。

基本上,在Oracle中,索引如何工作?

最佳答案

如果您有同时查找partIDpartNum的查询,则您要维护索引。在索引中同时包含两列意味着先由partID分解索引,然后再对每个partID对其进行partNum分解。仅在partNum上具有其他索引对于仅在partNum上而不在partID上进行查询的查询很有用。

这是一篇好文章的链接:http://it.toolbox.com/blogs/confessions/post-index-how-oracle-works-10605

通常,我会避免在旧系统上触摸索引。如果它是已投入生产一段时间的较旧系统,则这些索引可能是由DBA创建的,DBA进行了一些分析和计划,以确保它们运行良好并适合数据的使用。

08-28 07:22