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琐机制的一些特性,需要再继续研究。

相关文章

Java Oracle 结果集是Java语言中处理数据库查询结果的一种方...
Java AES和Oracle AES是现代加密技术中最常使用的两种AES加密...
Java是一种广泛应用的编程语言,具备可靠性、安全性、跨平台...
随着移动互联网的发展,抽奖活动成为了营销活动中不可或缺的...
Java和Oracle都是在计算机领域应用非常广泛的技术,他们经常...
Java 是一门非常流行的编程语言,它可以运行于各种操作系统上...