Oracle中外键不加索引可能导致哪些问题
程序员文章站
2022-09-17 19:23:31
Oracle中外键不加索引可能会导致3个问题,这里的外键包括Oracle所有种类的外键(普通外键、级联外键和置空外键)。
1.死锁以及并发问题。
对于父表的delete、upd...
Oracle中外键不加索引可能会导致3个问题,这里的外键包括Oracle所有种类的外键(普通外键、级联外键和置空外键)。
1.死锁以及并发问题。
对于父表的delete、update操作都会导致子表锁定(表级锁)。这指的是发起指令到指令结束这一段过程中,会锁表。这个全表锁可能会导致死锁,以及带来的子表并发性的问题。注意这里明显的hang,只会发生在特定场合。
这里强调一下,对于父表的delete、update操作,发起指令到指令结束这一段过程中,会锁表。也就是说若delete from 父表 where x = 1; 那么子表在会话显示出 xxx row deleted.结果之前是锁定的,显示出之后又是释放的。这个很关键,有助于理解一些例子。
2.删除变慢。
若索引是ON DELETE CASCADE,也就是级联外键。即使在不会导致1的情况,也会在删除过程中,每删除父表的一行就会对子表进行一次全表扫描,造成删除变慢。
3.查询变慢。
父表查询子表通过外键联合查询下,没有添加外键索引会导致查询变慢。
总结
深入下去,其实就是Oracle琐机制的一些特性,需要再继续研究。