Mysql更新倍数条件变慢

时间:2016-11-20 23:00:58

标签: mysql sql

我正在运行此更新,但MySQL需要很长时间才能完成,大约需要2分钟。他们有36个条件。

我的更新是这样的:

UPDATE table
SET delete = NULL
WHERE date > '2016-11-20 00:00:00' AND  (t.text LIKE '%text1%')
OR (t.text LIKE '%text2%')
OR (t.text LIKE '%text3%')
OR (t.text LIKE '%text4%')
OR (t.text LIKE '% text 5%')
...
...
...
...
OR (t.text LIKE '%text36%')

更新完成没问题,但需要很长时间,¿我知道如何优化它?

2 个答案:

答案 0 :(得分:1)

首先,修复查询(正如Jorge建议的那样):

UPDATE table
    SET delete = NULL
    WHERE date > '2016-11-20 00:00:00' AND
         (t.text LIKE '%text1%' OR
          t.text LIKE '%text2%' OR
          t.text LIKE '%text3%' OR
          t.text LIKE '%text4%' OR
          t.text LIKE '% text 5%'
          ...
          t.text LIKE '%text36%'
         );

这可能不是一个很大的改进,但regexp可能会更快:

UPDATE table
    SET delete = NULL
    WHERE date > '2016-11-20' AND
         t.text REGEXP 'text1|text2|text3| . . .  |text36';

唯一有帮助的索引是date。我建议table(date, text)date条件看起来很有选择性。

最后,您可能会发现全文索引适用于text。这取决于实际执行的逻辑(例如,“文本”模式字)。

答案 1 :(得分:0)

试试这个

UPDATE table
SET delete = NULL
WHERE (date > '2016-11-20 00:00:00') AND  (t.text LIKE '%text1%'
OR t.text LIKE '%text2%'
OR t.text LIKE '%text3%'
OR t.text LIKE '%text4%'
OR t.text LIKE '% text 5%'
...
...
...
...
OR t.text LIKE '%text36%')