我正在运行此更新,但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%')
更新完成没问题,但需要很长时间,¿我知道如何优化它?
答案 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%')