微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Oracle中外键不加索引的一些思考

Oracle中外键不加索引可能会导致3个问题,这里的外键包括Oracle所有种类的外键(普通外键、级联外键和置空外键)。

1.死锁以及并发问题。

对于父表的delete、update操作都会导致子表锁定(表级锁)。这指的是发起指令到指令结束这一段过程中,会锁表。这个全表锁可能会导致死锁,以及带来的子表并发性的问题。注意这里明显的hang,只会发生在特定场合。
这里强调一下,对于父表的delete、update操作,发起指令到指令结束这一段过程中,会锁表。也就是说若delete from 父表 where x = 1; 那么子表在会话显示出 xxx row deleted.结果之前是锁定的,显示出之后又是释放的。这个很关键,有助于理解一些例子。

2.删除变慢。

若索引是ON DELETE CASCADE,也就是级联外键。即使在不会导致1的情况,也会在删除过程中,每删除父表的一行就会对子表进行一次全表扫描,造成删除变慢。
落神的例子
http://www.jb51.cc/article/p-dftizvtn-yn.html

3.查询变慢。

父表查询子表通过外键联合查询下,没有添加外键索引会导致查询变慢。

总结

深入下去,其实就是Oracle琐机制的一些特性,需要再继续研究。

原文地址:https://www.jb51.cc/oracle/207148.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐