我尝试在一个大约有25k行的表上运行以下UPDATE,并且它已运行超过24小时且尚未完成。我只需要运行一次UPDATE,所以时间不是太大的问题,但任何长期的东西都不适合我。 UPDATE语句确实有效,因为我已经尝试在几个记录上单独运行它,但是当你将它应用于整个表时它就会陷入困境。
我确定LIKE导致减速,但我不知道如何使这更简单或更快,任何线索将不胜感激:
UPDATE INVENTORY i2
SET i2.BVRTLPRICE01 =
(SELECT i1.BVRTLPRICE01 FROM INVENTORY i1
WHERE
i1.CODE = REPLACE(LEFT(i2.CODE,1), 'S', 'C') + SUBSTRING(i2.CODE,2,LENGTH(i2.CODE)))
WHERE
i2.CODE like 'S%'
答案 0 :(得分:0)
使用正确的连接而不是子查询
UPDATE INVENTORY i2
SET i2.BVRTLPRICE01 = i1.BVRTLPRICE01
FROM INVENTORY i1,INVENTORY i2
WHERE i1.CODE = REPLACE(LEFT(i2.CODE,1), 'S', 'C') + SUBSTRING(i2.CODE,2,LENGTH(i2.CODE)))
AND i2.CODE like 'S%'
答案 1 :(得分:0)
LIMIT 1
到您的子查询。
答案 2 :(得分:0)
我只使用Pervasive一次或两次,但我无法想象引擎是如此可怕,问题就像你拥有它一样简单LIKE
。问题更可能是子查询。
我会尝试这样做:
UPDATE
I2
SET
BVRTLPRICE01 = I1.BVRTLPRICE01
FROM
INVENTORY I2
INNER JOIN INVENTORY I1 ON
I1.CODE = REPLACE(LEFT(I2.CODE, 1), 'S', 'C') +
SUBSTRING(I2.CODE, 2, LENGTH(I2.CODE)))
WHERE
I2.CODE LIKE 'S%'
另外,请确保您只是从I1加入一行而不是I2中的每一行都有很多行。