1

我已经尝试在一个大约有 25k 行的表上运行以下 UPDATE 并且它已经运行了超过 24 小时并且它还没有完成。我只需要运行一次此更新,因此时间不是太大的问题,但任何长时间的操作都不适合我。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%'
4

3 回答 3

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%'
于 2011-06-23T16:39:32.557 回答
0

我有一个小小的预感。可能是错误的,但基于疯狂的运行时和小数据集。尝试添加

LIMIT 1

到您的子查询。

于 2011-06-23T16:39:52.523 回答
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 中的每一行获取很多行。

于 2011-06-23T17:13:07.803 回答