社区
Oracle
帖子详情
带外键的表delete时很慢,但插入却正常
niujw002
2010-06-12 05:29:33
有两个表A、B,表A以表B的主键为外键。批量插入时,速度很快。但删除表中的部分内容时,慢得受不了。删除时我是先删A表,再删B表的。我的问题是:我觉得插入和删除都要维护外键关系,但为什么插入不慢而删除慢呢,有没有什么办法能提高效率呢?
...全文
363
13
打赏
收藏
带外键的表delete时很慢,但插入却正常
有两个表A、B,表A以表B的主键为外键。批量插入时,速度很快。但删除表中的部分内容时,慢得受不了。删除时我是先删A表,再删B表的。我的问题是:我觉得插入和删除都要维护外键关系,但为什么插入不慢而删除慢呢,有没有什么办法能提高效率呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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?
解决
Delete
数据删除慢的问题
数据库
delete
慢的问题解决经验和思路,希望对你有帮助
多
表
关系与
外键
约束
定义:
外键
是数据库中一个非常重要的概念,它是
表
中的一个字段,这个字段的作用是关联另一张
表
的主键。通过这种方式,在数据库层面强制建立起两张
表
之间的关联关系。例如,在员工
表
(emp)中的dept_id字段,它关联的就是部门
表
(dept)的id字段,dept_id就是
外键
。核心作用:
外键
的核心作用是防止出现“孤儿数据”。它就像是一个严格的把关人,保证“多”的一方的关联字段必须对应“一”的一方存在的记录。
在MySQL数据库
表
中设置
外键
是否会影响性能?
外键
的主要作用是保证数据的完整性,但它会对数据库的性能产生一定的影响。就像玩具箱的锁一样,
外键
虽然增加了安全性和规范性,但也可能稍微影响使用的便捷性。根据实际需求权衡利弊即可!是一种约束,用于确保两个
表
之间的数据一致性。它就像一个“锁”,确保子
表
中的数据必须与主
表
中的数据匹配。在 MySQL 中,在 MySQL 中,
SQL的主键和
外键
约束
SQL的主键和
外键
的作用:
外键
取值规则:空值或参照的主键值。 (1)
插入
非空值
时
,如果主键
表
中没有这个值,则不能
插入
。 (2)更新
时
,不能改为主键
表
中没有的值。 (3)删除主键
表
记录
时
,你可以在建
外键
时
选定
外键
记录一起级联删除还是拒绝删除。 (4)更新主键记录
时
,同样有级联更新和拒绝执行的选择。 简而言之,SQL的主键和
外键
就是起约束作用。
ORM
外键
相关
外键
关联的优缺点优点:
插入
修改数据
时
,会自动查询关联
表
,如果数据不合法,就不能修改,保证数据不会错乱,不会出现脏数据。缺点:每次校验会消耗资源,数据量大会
很慢
,其实可以通过程序控制脏数据不被录入。公司一般建立
外键
,但是不会有约束。on_
delete
参数 ManyToMany参数(through,db_constraint) 如果ManyToMany没有指定through参数,django会自动创建第三张
表
,通过对第三张关系
表
进行操作。但是第三张
表
的扩展性很差,不能给第三张
表
添加字段。而如果不写ManyTo
Oracle
17,138
社区成员
55,257
社区内容
发帖
与我相关
我的任务
Oracle
Oracle开发相关技术讨论
复制链接
扫一扫
分享
社区描述
Oracle开发相关技术讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章