我有这个查询将日期设置为远期。该表有400万条记录。而且查询非常简单。但查询花了将近3分钟才能运行。
UPDATE TABLE
SET to_date = STR_TO_DATE('31-01-3000','%d-%m-%Y')
WHERE to_date IS NULL;
此专栏没有INDEX。
如何调整此查询或MySQL本身?非常感谢。
答案 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。