社区
Oracle
帖子详情
带外键的表delete时很慢,但插入却正常
niujw002
2010-06-12 05:29:33
有两个表A、B,表A以表B的主键为外键。批量插入时,速度很快。但删除表中的部分内容时,慢得受不了。删除时我是先删A表,再删B表的。我的问题是:我觉得插入和删除都要维护外键关系,但为什么插入不慢而删除慢呢,有没有什么办法能提高效率呢?
...全文
452
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?
关于Mysql新建
表
时
设置
外键
或者从已有
表
中添加
外键
关于Mysql新建
表
时
设置
外键
或者从已有
表
中添加
外键
*
外键
:在从
表
中与主
表
主键对应的那一列,如:下面例子中的联系人
表
中的(lkm_cust_id) 主
表
: 一方,用来约束别人的
表
从
表
: 多方,被别人约束的
表
1.新建
表
时
[CONSTRAINT] [
外键
在这里
插入
代码片约束名称] FOREIGN KEY(
外键
字段名) REFERENCES 主
表
名(主键字段名); 例如: 此处在联系人
表
中添加
外键
(cust_id) /*创建客户
表
*/ CREATE TABLE cst_customer ( cu
数据库如何给含有
外键
的
表
中
插入
数据?
数据库如何给含有
外键
的
表
中
插入
数据? 数据库有三个
表
格:
表
1 Table: orderdetail Columns: id int(11) AI PK orders_id int(11) items_id int(11) items_num int(11)
表
2 Table: items Columns: id int(11) AI PK name varchar(32)
Mysql如何向存在
外键
的数据
表
中
插入
数据
1、创建
表
CREATE TABLE `trn_comment_msg` ( `comMsgId` int(11) NOT NULL AUTO_INCREMENT COMMENT '评论消息主键', `msgId` int(11) NOT NULL COMMENT '消息ID', `comId` int(11) NOT NULL COMMENT '课程评论ID',...
SQL中的
外键
外键
概念:
外键
与主键相对,作用就是通过主
外键
的之间关系使对张
表
中的数据更好的关联。
外键
特点: 从
表
外键
的值是对主
表
主键的引用。 从
表
外键
类型,必须与主
表
主键类型一致。 作用:
外键
可以保证数据的完整性和一致性 格式:(2种) [constraint
外键
约束关系的名称] foreign key 从
表
(
外键
字段名称) references 主
表
(主...
MySQL
外键
约束
1.添加
外键
约束
外键
指的是在一个
表
中引用另一个
表
中的一列或多列,被引用的列应该具有主键约束或唯一性约束,从而保证数据的一致性和完整性. 被用的
表
称为主
表
引用
外键
的
表
称为从
表
[ CONSTRAINT symbol] FOREIGN KEY [index_name(index_ col_name,… REFERENCES tbl_name(index_col_name,…) [ON
DELETE
{RESTRICT | CASCADE | SET NULL | NO ACTION |SET DEFAULT
Oracle
17,133
社区成员
55,258
社区内容
发帖
与我相关
我的任务
Oracle
Oracle开发相关技术讨论
复制链接
扫一扫
分享
社区描述
Oracle开发相关技术讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章