我和一个同事刚接触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进行了一些分析和计划,以确保它们运行良好并适合数据的使用。