Oracle索引冗余

标签 oracle indexing

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

关于Oracle索引冗余,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3842435/

相关文章:

sql - Oracle 序列生成器语法

java - 没有主键的表的 Hibernate 映射

sql - 如何格式化 Oracle SQL 纯文本选择输出

mysql索引问题

sql - 需要显示一个虚拟月份 - Oracle SQL

java - ClassNotFoundException oracle.jdbc.driver.OracleDriver

indexing - CouchDB 用于索引聚合数据的这项技术的通用名称是什么

c - 文字字符串索引是标准 C 吗?

mysql - 在 group by 子句中使用的列上添加索引好吗?

pandas - 使用基于其他列 pandas 中的值的拆分和索引来处理一列中的数据