从另一个表加速UPDATE

时间:2018-10-29 14:57:03

标签: sql postgresql performance

我有以下代码:

UPDATE tableOne
SET columnOne = CASE
                 WHEN tableOne.columnTwo LIKE '%-02-%' OR tableOne.columnTwo LIKE '%-03-%' OR
                      tableOne.columnTwo LIKE '%-04-%' OR
                      tableOne.columnTwo LIKE '%-05-%' OR
                      tableOne.columnTwo LIKE '%-06-%' OR
                      tableOne.columnTwo LIKE '%-07-%' OR tableOne.columnTwo LIKE '%-08-%' OR
                      tableOne.columnTwo LIKE '%-09-%'
                         THEN tableTwo.columnOne :: text
                 ELSE tableOne.columnOne
    END

FROM tableTwo
WHERE tableTwo.tableId = tableOne.tableId

我有两个桌子。 tableOne由1亿行(和40列)组成,而tableTwo由9千万行组成。以上查询已经进行了2天以上。我不确定它是否会完成。有没有一种优化查询的方法?

LIKE如果有帮助,请执行以下操作: 检查字符串(例如2018-06-30 08:20:17)是否已列出月份。如果是,请从tableTwo中选择值(并将其投放以键入text),否则保留自身价值(已输入text)。

2 个答案:

答案 0 :(得分:1)

仅当月份在02到09之间时才更新

UPDATE tableOne
SET columnOne = tableTwo.columnOne :: text
FROM tableTwo
WHERE tableTwo.tableId = tableOne.tableId 
  AND SUBSTRING(tableOne.columnTwo FROM 6 FOR 2) BETWEEN '02' AND '09'

答案 1 :(得分:1)

addressline2条件移至output_1.append(addressline2.split(",")) 子句:

case

正则表达式实际上并没有比一堆赞快得多。这里的胜利在于不更新不需要更新的行。如果where的格式是已知格式,则可以改用子字符串操作。