Locks and Unindexed Foreign Keys

今天遇到问题:

问题描述:表zml1的主键为zmlid,zmlid是表zml2的外键。

操作:1、insert into zml1(主键等列)

         2、insert into zml2,执行到这时一直显示在执行,但是就是执行不完。

解决:在zml2的外键zmlid上创建索引,将数据回滚,重新执行步骤1和2,则可以执行成功。

 ------------------------------------------------------------------------------------------------------------------------------------

在一下情况下,Oracle在修改附表后会对子表加一个全表锁:

1、如果更新了父表的主键,由于外键上没有索引,所以子表会被锁住。

2、如果删除了父表中的一行,由于外键上没有索引,整个子表也会被锁住。

----------------------------------------------------------------------------------------------------------------

除了全表锁外,在以下情况下,未加索引的外键也可能带来的问题:

1、如果有ON DELETE CASCADE,而且没有对子表加索引,例如,EMP是DEPT的子表,DELETE DEPTNO = 10应该CASCADE(级联)至EMP。如果EMP中的DEPTNO没有索引,那么删除DEPT表中的每一行时都会对EMP做一个全表扫描。这个全表扫表可能是不必要的,而且如果从父表删除多行,父表中每删除一行就要扫描一次子表。

2、当连接EMP和DEPT表做查询时,查询速度慢。

-------------------------------------------------------------------------------------------------------------

什么时候不需要对外键加索引呢?

1、没有从父表删除行

2、没有更新父表的唯一键

3、没有从父表连接子表


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值