我有一个使用ENC_ID作为PK的表。此字段也是一个FK(另一个表控制其创建)到许多其他表(它在其他表中创建)。
它有两个指数:
问题:
答案 0 :(得分:0)
将ENC_ID定义为PK会自动创建索引吗?
是。 PK始终由唯一索引支持(如果您只是在列上声明PK约束)
在任一索引
中使用ENC_ID字段是否有任何价值
这取决于查询,例如索引包含SQL语句中使用的所有列,然后这确实有一个好处,因为Oracle可以在这种情况下使用索引扫描。如果SQL语句使用的列数多于索引中定义的列数,则添加PK列可能没有任何优势。
是否使用索引取决于几个方面(查询,表中的行数,索引值的分布,......),因此不可能给出一般规则“这将永远使用“或”这将永远不会被使用“。
您可能还需要阅读概念手册:http://docs.oracle.com/cd/E11882_01/server.112/e25789/indexiot.htm#BABHJAJF
答案 1 :(得分:0)
只有当一个索引(唯一或非唯一)无法使用时,它才会创建索引。即如果你曾经说过一个索引(ENC_ID,其他什么),那么添加PK只会使用该索引并且不会创建另一个索引。
因为你没有过滤ENC_ID而只是加入然后可能没有,好像你从那张桌子开车,那么过滤列就是你需要索引的东西(根据查询它可能仍然有好处)例如,如果它可以使用另一个连接索引在表访问完成之前消除行。)如果你从另一个表开车,那么它会想要在前沿使用带有ENC_ID的索引。我们需要看到SQL提供了更明确的答案。