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分钟,怎么才能提高效率呢。谢谢!
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快,有时候一样快,关键还是要看执行计划,不能人云亦云