我有这个查询将日期设置为遥远的未来。该表有 400 万条记录。查询非常简单。但是查询运行了将近 3 分钟。
UPDATE TABLE
SET to_date = STR_TO_DATE('31-01-3000','%d-%m-%Y')
WHERE to_date IS NULL;
此列没有索引。
如何调整这个查询或 MySQL 本身?非常感谢。
我有这个查询将日期设置为遥远的未来。该表有 400 万条记录。查询非常简单。但是查询运行了将近 3 分钟。
UPDATE TABLE
SET to_date = STR_TO_DATE('31-01-3000','%d-%m-%Y')
WHERE to_date IS NULL;
此列没有索引。
如何调整这个查询或 MySQL 本身?非常感谢。
不涉及索引的最快解决方案(实际上是最快的解决方案 PERIOD)是使列默认为“31-01-3000”,这意味着您永远不必更新它。请注意,最初的 ALTER 可能需要几分钟,但考虑到您是在如此大的表上运行它。
ALTER TABLE `table_name`
CHANGE COLUMN `to_date` `to_date` DATE NOT NULL DEFAULT '3000-01-31';
使用单独的 SELECT 获取这些记录的索引,然后根据索引进行更新。并使用用户定义的变量提前存储计算。
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 代替。