[英]Efficiently Update MySQL Records
示例数据:
PostID DateTime DataTimeProper UserID UserName IPAddress
1234567.page#00008912 07/25/2013 14:50:21 NULL 00000001 TestUser 127.0.0.1
2468012.page#04208002 07/28/2013 18:42:13 NULL 03209827 BobTest 127.0.0.2
我正在寻找最有效的方法来更新表(百万)中的每条记录(其中DateTimeProper
str_to_date
NULL
,并且要插入的值来自DateTime列的str_to_date
。
SELECT STR_TO_DATE(`DateTime`,'%m/%e/%Y %H:%i:%s');
很简单
UPDATE yourTable SET DateTimeProper = STR_TO_DATE(`DateTime`,'%m/%e/%Y %H:%i:%s')
WHERE DateTimeProper IS NULL;
它需要很长的时间,而且它是一次性操作,对吗?
如果您真的坚持,您可能会麻烦自己进行大块更新,例如(假设您有一个名为id或诸如此类的auto_increment列)
UPDATE yourTable SET DateTimeProper = STR_TO_DATE(`DateTime`,'%m/%e/%Y %H:%i:%s')
WHERE DateTimeProper IS NULL
AND id BETWEEN 0 AND 10000;
接着
UPDATE yourTable SET DateTimeProper = STR_TO_DATE(`DateTime`,'%m/%e/%Y %H:%i:%s')
WHERE DateTimeProper IS NULL
AND id BETWEEN 10000 AND 20000;
等等。 有人希望这样做是为了让这些块能够存储到内存中,但我认为这样做不值得。 MySQL已经在这方面做得很好。
尝试这个
UPDATE table SET DataTimeProper =
(SELECT STR_TO_DATE(DateTime,'%m/%e/%Y %H:%i:%s'))
WHERE DataTimeProper IS NULL
尽管您应该考虑将DateTime
列更改为DATETIME
类型而不是字符串,因为这样做将使其更有效。 尤其是在处理数百万行的表时。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.