sql语句执行速度特别慢的问题

wskbuaa1984 2009-06-01 09:02:59
我的sql语句是:INSERT INTO TABLE (A, B, C, D) SELECT a, b, c, d FROM DUAL WHERE NOT EXISTS (SELECT * FROM TABLE WHERE TABLE.A = a AND TABLE.B = b AND TABLE.C = c AND TABLE.D = d);
作用是如果表中不存在重复的数据则插入数据。我表中已经有了4000万的数据量,并且建立了在A列建立了索引,在B列也建立了索引。我在执行该语句时速度特别慢,请问有什么可以改进的措施和方法。(其中,A,B,C,D为表中的字段,a,b,c,d为要插入的数值)。
...全文
88 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
shiri512003 2009-06-01
  • 打赏
  • 举报
回复
kankan
liuyi8903 2009-06-01
  • 打赏
  • 举报
回复
关键是:

SELECT * FROM TABLE WHERE TABLE.A = a AND TABLE.B = b AND TABLE.C = c AND TABLE.D = d;

我估计慢在这个地方.
vc555 2009-06-01
  • 打赏
  • 举报
回复
用merge into 啊
yhuib 2009-06-01
  • 打赏
  • 举报
回复
在TABLE上建A,B,C,D的联合索引。
hebo2005 2009-06-01
  • 打赏
  • 举报
回复
1你可以在ABCD四个建唯一索引,这样插入重复时会报错的
2用MERGE INTO
langcai1981 2009-06-01
  • 打赏
  • 举报
回复
INSERT INTO TABLE (A, B, C, D) SELECT a, b, c, d FROM DUAL WHERE NOT EXISTS (SELECT * FROM TABLE WHERE TABLE.A = a AND TABLE.B = b AND TABLE.C = c AND TABLE.D = d);
创建一个联合主键(A,B,C,D),再写一个存储过程执行此动作吧,运用LOOP循环就可以了!
suncrafted 2009-06-01
  • 打赏
  • 举报
回复
1、SELECT * FROM TABLE WHERE TABLE.A = a AND TABLE.B = b AND TABLE.C = c AND TABLE.D = d;
改成
SELECT A,B,C,D FROM TABLE WHERE TABLE.A = a AND TABLE.B = b AND TABLE.C = c AND TABLE.D = d;
2、A/B/C/D四个查询条件,哪个过滤数据的条数越多,放在越后面。

3,491

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧