簡體   English   中英

在MySQL中更新400萬條記錄時如何調整此查詢?

[英]How to tune this query when updating 4 million records in MySQL?

我有此查詢將日期設置為將來的很遠。 該表有400萬條記錄。 而且查詢確實很簡單。 但是查詢運行了將近3分鍾。

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

此列上沒有INDEX。

如何調整此查詢或MySQL本身? 非常感謝。

不涉及索引的最快解決方案(實際上是最快的解決方案PERIOD)將使該列默認為“ 31-01-3000”,這意味着您永遠不必更新它。 請注意,考慮到要在這么大的表上運行,初始ALTER可能要花費幾分鍾。

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

使用單獨的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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM