ORACLE的执行效率问题(50分)

  • 主题发起人 主题发起人 ousigui
  • 开始时间 开始时间
O

ousigui

Unregistered / Unconfirmed
GUEST, unregistred user!
oracle8i数据库中,我创建了两个表G001,G002如下:
create table G001
(
G00101 char(10) not null,//the ID of product
G00102 varchar2(40) not null,//the name of product
G00103 varchar2(20) not null,//and so on......
primary key(G00101)
);
create table G002
(
G00201 char(15) not null,//the ID of sec
G00101 char(10) not null,//the ID of product
primary key(G00201),
foreign key(G00101) references G00101(G00101)
);
create index index_G002_G00101 on G002(G00101);

然后我往G001表插入100行记录,往G002表插入20000行记录。

可是执行删除基表的SQL时很慢很慢(就象死机):delete from G001 where G00101='dsfdfd'
有没有办法加快数据库的执行速度,我在引用表的外键约束,创建了索引也没有加快!
是不是数据库在删除基表时,对引用表(而不是引用表的外键约束的索引)G002进行全表扫描?

 
不要用外键用触发器
 
>是不是数据库在删除基表时,对引用表(而不是引用表的外键约束的索引)G002进行全表扫描?

是的,所以很慢!
建议更改表的关系。
 
不要使用外键。
ORACLE中的删除操作本来就慢,加外键后更加慢。
 
如果非要用外键,是不是就一定要大大地降低数据库的执行性能?
 
会降低但不是'大大地降低',2000条记录不会慢的
断开外健看能快多少?
 
你是否已经将数据库优化(安装后有没有优化initSID.ora配制文件(比如initorcl.ora))
有没有将ROLLBACK表空间参数调整,有没有将rollback segment参数调整,
(delete、insert大量数据用到大量回滚段)
 
首先如果你要删除G001的数据,,如果在G002有数据,,你的删除不会成功的,
比较好的方法是先删G002的。。。在删G001的。。
另:我以前有上百万的记录有外键,也不会很慢的,
另:如果要修改ORACLE的参数。要加你的TEmp表空间。
数据的排序和查询是要用TEmp表空间的。。你只删一条记录。。用不了多少回滚段的 
 
我使用的记录数和多,外键关联的表很多速度不会很慢
 
多人接受答案了。
 
后退
顶部