社区
Oracle
帖子详情
带外键的表delete时很慢,但插入却正常
niujw002
2010-06-12 05:29:33
有两个表A、B,表A以表B的主键为外键。批量插入时,速度很快。但删除表中的部分内容时,慢得受不了。删除时我是先删A表,再删B表的。我的问题是:我觉得插入和删除都要维护外键关系,但为什么插入不慢而删除慢呢,有没有什么办法能提高效率呢?
...全文
348
13
打赏
收藏
带外键的表delete时很慢,但插入却正常
有两个表A、B,表A以表B的主键为外键。批量插入时,速度很快。但删除表中的部分内容时,慢得受不了。删除时我是先删A表,再删B表的。我的问题是:我觉得插入和删除都要维护外键关系,但为什么插入不慢而删除慢呢,有没有什么办法能提高效率呢?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
qldsrx
2010-06-20
打赏
举报
回复
[Quote=引用 12 楼 niujw002 的回复:]
我现在是删除B表的时候慢,而且我是先删了A表,谁能解释一下删除B表时,数据库都在干什么呢?oracle的cpu利用率达到100%。
[/Quote]
有外键嘛,它要检测自己被关联的键是否存在从表项,当你的A表数据较多时,每删除一条B表记录都会检测一次,这样能不慢吗?如果你对数据完整性要求不高,特别是先删除主表再删从表都可以的情况,那么还是建议不要设置外键了,设置了在删除时就慢,其实也影响插入的,从表插入要检测主表,但是主表内容显然不多,比从表少很多,所以相应的检测速度较快。
niujw002
2010-06-17
打赏
举报
回复
我现在是删除B表的时候慢,而且我是先删了A表,谁能解释一下删除B表时,数据库都在干什么呢?oracle的cpu利用率达到100%。
niujw002
2010-06-13
打赏
举报
回复
我把分区都去掉了,确实快了一些,但还是比较慢。
qldsrx
2010-06-13
打赏
举报
回复
我怀疑是你分区太多的原因,它要多分区查找记录。至于外键是否也有影响,你可以先尝试将外键删除了插入并删除新插入数据,测试下就知道了。
niujw002
2010-06-13
打赏
举报
回复
还有,就是为什么批量插入时不慢呢?插入和删除对于外键的操作原则上不是一样的么?
niujw002
2010-06-13
打赏
举报
回复
主外键都建立索引了。我没用Hibernate删除,是用jdbc。而且每个表还有70个分区。是不是和分区有关呢?谢谢各位。
xmankevin1980xman
2010-06-13
打赏
举报
回复
你可以写个触发器在A表上,写上DELETE B表 WHERE ...
这样你删时就不会太慢了
dlpseeyou
2010-06-13
打赏
举报
回复
建立索引
wffffc
2010-06-12
打赏
举报
回复
[Quote=引用 2 楼 tangren 的回复:]
2、请在外键上建立索引
[/Quote]
11
碧水幽幽泉
2010-06-12
打赏
举报
回复
[Quote=引用 3 楼 dawugui 的回复:]
引用楼主 niujw002 的回复:
有两个表A、B,表A以表B的主键为外键。批量插入时,速度很快。但删除表中的部分内容时,慢得受不了。删除时我是先删A表,再删B表的。我的问题是:我觉得插入和删除都要维护外键关系,但为什么插入不慢而删除慢呢,有没有什么办法能提高效率呢?
主外键表的删除本身就慢,你可以考虑对相关字段建议索引.或者取消主外键关系.
[/Quote]
支持!
dawugui
2010-06-12
打赏
举报
回复
[Quote=引用楼主 niujw002 的回复:]
有两个表A、B,表A以表B的主键为外键。批量插入时,速度很快。但删除表中的部分内容时,慢得受不了。删除时我是先删A表,再删B表的。我的问题是:我觉得插入和删除都要维护外键关系,但为什么插入不慢而删除慢呢,有没有什么办法能提高效率呢?
[/Quote]
主外键表的删除本身就慢,你可以考虑对相关字段建议索引.或者取消主外键关系.
tangren
2010-06-12
打赏
举报
回复
1、插入是否按条插入,而删除则批量?
2、请在外键上建立索引
iihero
2010-06-12
打赏
举报
回复
定义表时加入cascade delete?
删除可否采用cascade delete?
ORACLE
DELETE
数据慢的案例
今天遇到一个有意思的案例,一开发同事告诉我他删除一个
表
的记录非常慢,已经快1个多小
时
了还没有完成。而且删除的记录只有1百多条。真是大跌眼镜的一件事情。最后发现该
表
与多个
表
有
外键
关联关系(这个
表
即是主
表
、又是从
表
),最后我禁用引用该
表
的
外键
约束后。一秒内删除了记录。然后启用
外键
约束关系。下面记录、分析一下解决过程的思路(下面是在测试环境的记录,数据量不一样)。 我去处理这个问题
时
,首先怀疑可...
解决
Delete
数据删除慢的问题
数据库
delete
慢的问题解决经验和思路,希望对你有帮助
在MySQL数据库
表
中设置
外键
是否会影响性能?
外键
的主要作用是保证数据的完整性,但它会对数据库的性能产生一定的影响。就像玩具箱的锁一样,
外键
虽然增加了安全性和规范性,但也可能稍微影响使用的便捷性。根据实际需求权衡利弊即可!是一种约束,用于确保两个
表
之间的数据一致性。它就像一个“锁”,确保子
表
中的数据必须与主
表
中的数据匹配。在 MySQL 中,在 MySQL 中,
为什么不推荐使用
外键
对于更新来说,级联更新是强阻塞,存在数据库更新风暴(Database Update Storm)的风险。所谓 Database Update Storm,指的是在高并发环境下,多个客户端同
时
对数据库进行大量的更新操作,存在锁竞争问题甚至死锁,从而导致数据库性能急剧下降或完全崩溃。另外,当数据量非常大的
时
候,常见手段是分库分
表
,但
外键
通常难以跨越不同数据库来建立联系,数据的一致性更难维护。因此,
外键
与级联并不适合分布式、高并发集群,但单机低并发业务可以考虑使用
外键
保证一致性和完整性。
ORM
外键
相关
外键
关联的优缺点优点:
插入
修改数据
时
,会自动查询关联
表
,如果数据不合法,就不能修改,保证数据不会错乱,不会出现脏数据。缺点:每次校验会消耗资源,数据量大会
很慢
,其实可以通过程序控制脏数据不被录入。公司一般建立
外键
,但是不会有约束。on_
delete
参数 ManyToMany参数(through,db_constraint) 如果ManyToMany没有指定through参数,django会自动创建第三张
表
,通过对第三张关系
表
进行操作。但是第三张
表
的扩展性很差,不能给第三张
表
添加字段。而如果不写ManyTo
Oracle
17,140
社区成员
55,259
社区内容
发帖
与我相关
我的任务
Oracle
Oracle开发相关技术讨论
复制链接
扫一扫
分享
社区描述
Oracle开发相关技术讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章