SQL文如下:
UPDATE tableA
SET FLAG = 1
WHERE FLAG <> 1
AND fieldA NOT IN
(SELECT substr(fieldA,1,8)||max(substr(fieldA,9,2))
FROM tableA
GROUP BY substr(fieldA,1,8)) 他的功能是,将表A中的若干条记录的flag设置成1,条件是:
如果该表中fieldA列的值的前8位相同,那么将后两位中不是最大的纪录进行设置,
举个例子:
如果fieldA的值有AAAAAAAA01,AAAAAAAA02,AAAAAAAA03,
那么将AAAAAAAA01,AAAAAAAA02对应的纪录的flag进行设置。
现在表A中有两万条数据,上述sql文执行需要6分钟,怎么才能提高效率呢。谢谢!
UPDATE tableA
SET FLAG = 1
WHERE FLAG <> 1
AND fieldA NOT IN
(SELECT substr(fieldA,1,8)||max(substr(fieldA,9,2))
FROM tableA
GROUP BY substr(fieldA,1,8)) 他的功能是,将表A中的若干条记录的flag设置成1,条件是:
如果该表中fieldA列的值的前8位相同,那么将后两位中不是最大的纪录进行设置,
举个例子:
如果fieldA的值有AAAAAAAA01,AAAAAAAA02,AAAAAAAA03,
那么将AAAAAAAA01,AAAAAAAA02对应的纪录的flag进行设置。
现在表A中有两万条数据,上述sql文执行需要6分钟,怎么才能提高效率呢。谢谢!
解决方案 »
- 各大虾来玩个sql语句,模拟比赛评分,去掉最高分,去掉最低分求平均分
- 写了一个sql脚本,用命令行执行有错误,求解
- 关于sqlplus中set newpage 0打印的两个黑框的作用
- rman backup archivelog all delete input?
- 请问 如何修改CSDN的登录密码?
- 请问以下有关oracle的服务有什么作用,是针对什么程序而言的
- 请教如何在Oracle中设定编码类型或长度(百分求助)
- select 语句
- 涉及到“生产者-消费者”的 数据库存取 问题设计!(有结果一定给分)
- 需要oracle帮助文档
- 如何给数据库加锁
- ---明天去 富士康 面试,通知说要搞一天......回来狂散分
SET FLAG = 1
WHERE FLAG <> 1
AND NOT EXISTS
(SELECT 1
FROM tableA b
where a.fieldA=substr(b.fieldA,1,8)||max(substr(b.fieldA,9,2))
GROUP BY substr(fieldA,1,8))
试试吧
UPDATE tableA
SET FLAG = 1
WHERE FLAG <> 1
AND fieldA NOT IN
(SELECT substr(fieldA,1,8)||max(substr(fieldA,9,2))
FROM tableA
GROUP BY substr(fieldA,1,8))
看看到底那里cost比较大,问题出在哪里2.tableA的FLAGH和fieldA字段有没有作过index?没有就加index
3 not in 和not exists不是一定说哪个更快,不能一概而论,有时候是not in快,有时候是not exists快,有时候一样快,关键还是要看执行计划,不能人云亦云