1

我有这个查询将日期设置为遥远的未来。该表有 400 万条记录。查询非常简单。但是查询运行了将近 3 分钟。

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

此列没有索引。

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

4

2 回答 2

1

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

ALTER TABLE `table_name`
CHANGE COLUMN `to_date` `to_date` DATE NOT NULL DEFAULT '3000-01-31';
于 2013-05-15T00:00:14.533 回答
0

使用单独的 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 代替。

于 2013-05-14T23:54:56.900 回答