我正在尝试使用CLI脚本更新LARGE MyISAM表(2500万条记录).该表未被其他任何东西锁定/使用.
我想而不是为每条记录做单个UPDATE查询,我不妨使用CASE功能.
该id
领域是主要的.我怀疑以下查询应该花费几毫秒.
UPDATE `table` SET `uid` = CASE
WHEN id = 1 THEN 2952
WHEN id = 2 THEN 4925
WHEN id = 3 THEN 1592
END
Run Code Online (Sandbox Code Playgroud)
瞧,查询占用了CPU,并没有永远完成.
然后,令我惊讶的是,我发现查询正在更新所有2500万行,在我没有指定的行上放置NULL.
那是什么意思?我是否可以在每次执行此查询时仅对特定行执行MASS更新而不更新2500万行?或者我是否必须进行单独更新然后提交?
rs.*_*rs. 153
试试这个
UPDATE `table` SET `uid` = CASE
WHEN id = 1 THEN 2952
WHEN id = 2 THEN 4925
WHEN id = 3 THEN 1592
ELSE `uid`
END
WHERE id in (1,2,3)
Run Code Online (Sandbox Code Playgroud)
小智 10
更简单的是:
Run Code Online (Sandbox Code Playgroud)UPDATE `table` SET uid = ELT(id, 2952, 4925, 1592) WHERE id IN (1,2,3)
这只有在uid确实为1,2,3时才有效.
资料来源:http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_elt
更简单的是:
UPDATE `table` SET uid = ELT(id, 2952, 4925, 1592) WHERE id IN (1,2,3)
Run Code Online (Sandbox Code Playgroud)
那是因为你错过了ELSE.
"返回第一个条件为真的结果.如果没有匹配的结果值,则返回ELSE后的结果,如果没有ELSE部分,则返回NULL." (http://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html#operator_case)
归档时间: |
|
查看次数: |
137085 次 |
最近记录: |