如何在MySQL中更新400万条记录时调整此查询?

时间:2013-05-14 23:47:12

标签: mysql performance database-performance

我有这个查询将日期设置为远期。该表有400万条记录。而且查询非常简单。但查询花了将近3分钟才能运行。

UPDATE TABLE 
SET to_date = STR_TO_DATE('31-01-3000','%d-%m-%Y') 
WHERE to_date IS NULL;

此专栏没有INDEX。

如何调整此查询或MySQL本身?非常感谢。

2 个答案:

答案 0 :(得分:1)

不涉及索引的最快解决方案(事实上,最快的解决方案PERIOD),将使列默认为'31 -01-3000',这意味着您永远不必更新它。请注意,初始ALTER可能需要花费几分钟,考虑到您在如此大的桌子上运行它。

ALTER TABLE `table_name`
CHANGE COLUMN `to_date` `to_date` DATE NOT NULL DEFAULT '3000-01-31';

答案 1 :(得分:0)

使用单独的SELECT获取这些记录的索引,然后根据索引进行UPDATE。并使用用户定义的变量提前存储计算。

SET @newDate = STR_TO_DATE('31-01-3000','%d-%m-%Y')
UPDATE yourTable 
SET to_date = @newDate
WHERE id IN (
  SELECT id FROM yourTable WHERE to_date IS NULL
)

此外,如果可能,请考虑围绕此要求进行编程。我自己的偏好是将结束日期设置为NULL,然后让查询足够聪明,在查询结束日期时明天替换为NULL。