我和一位同事是 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 中,索引是如何工作的?
最佳答案
如果您的查询同时查找 partID
和 partNum
,那么您需要维护索引。索引中包含两列意味着索引首先按 partID
进行分割,然后针对每个 partID
再按 partNum
进行分割。仅在 partNum
上设置其他索引对于仅在 partNum
上查询而不是在 partID
上查询的查询非常有用。
这是一篇好文章的链接:http://it.toolbox.com/blogs/confessions/post-index-how-oracle-works-10605
作为一般规则,我会避免接触遗留系统上的索引。如果它是已经投入生产一段时间的旧系统,那么这些索引可能是由 DBA 创建的,DBA 进行了一些分析和规划,以确保它们运行良好并适合数据的使用。
关于Oracle索引冗余,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3842435/