繁体   English   中英

有效地更新MySQL记录

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM