【发布时间】:2012-01-03 20:49:00
【问题描述】:
我正在进行一个数据迁移项目,其中一些表只会加载一次。 IE。仅使用一个 Select From Insert Into 将完全加载表。
我想通过使用主键和约束来确保数据完整性。
使用 Oracle,当我创建主键或约束时,Oracle 会自动为我创建相应的索引。
是否可以禁用索引的创建?请注意,我仍然希望根据需要验证约束...以便在 Oracle 实际需要进行验证的情况下,它将创建索引(根据需要).. 或进行全表扫描.
我想禁用或推迟创建此索引的原因是,我注意到大多数创建的索引(用于约束)实际上并没有被使用。为此,我打开所有索引的使用情况监控,运行数据迁移过程,然后验证 v$object_usage。
【问题讨论】:
-
我的 2 美分:约束的想法是检查它们。并检查一个你真的想使用索引的约束。所以要么不创建约束(手动检查,或者使用 db 触发器),要么接受索引的创建。
-
我认为在我的情况下它并没有真正被检查(至少它没有使用索引)。我猜发生的事情是,当我执行插入时,Oracle 正在跳过约束检查,因为我直接从相应的表中加载外键(因此在这种情况下,不需要实际进行约束检查,因为 Oracle 知道匹配记录确实存在)。
-
幸运的是,Oracle 不会允许您(或其他任何人)犯这样的错误。
-
使用监控只检查查询期间是否使用了索引来获取数据;它不包括用于验证唯一性、主键或外键约束时的索引使用情况。
标签: oracle indexing constraints