解析类似于

时间:2017-01-24 17:06:55

标签: mysql

我会在详细介绍

之前向您展示我想要实现的目标
EXPLAIN SELECT * FROM db.xxx WHERE xxx.information LIKE '%incorrectInformation%';

基本上,我已经将数据从一个数据库和结构导入到另一个数据库和结构中,不幸的是有一些unicode错误我只想用不同的字符串替换“incorrectInformation”,例如“correctInformation”。

我想知道它会返回多少个字段,所以我可以知道最好的限制是什么。

我正在处理的表有80亿个条目,所以我真的不想无限制地运行它,并且以10的限制执行它需要几秒钟才能执行。

有没有更好的方法来实现我想要实现的目标?

我将运行的实际查询是这样的:

UPDATE db.xxx SET information = REPLACE(information, 'incorrectInformation', 'correctInformation') where information LIKE '%incorrectInformation%' LIMIT 10;

我希望解释工作的原因是,如果只有100个字段需要更新,我不介意做10次,10次。但是,如果它像几十万,我非常怀疑,那么我需要一个更好的解决方案。

非常感谢您提供的任何帮助!

1 个答案:

答案 0 :(得分:0)

首先,EXPLAIN只会告诉你它需要做多少工作,而不一定是结果中有多少行。

您可以做的是将问题行的主键选择到临时表中,例如

CREATE TABLE foo (PRIMARY KEY(id))
SELECT id FROM xxx WHERE yyy LIKE '%whatever%';

这可能需要一段时间,但您可以使用临时表来进一步检查问题的范围,并在准备好后使用它来更快地执行处理。

UPDATE xxx,foo SET xxx.yyy='woo yay' WHERE xxx.id=foo.id;

当你完成后,只需DROP TABLE foo;