2010-04-21 59 views
4
ALTER TABLE tablename AUTO_INCREMENT = 10000000 

此查詢花費很長時間來更新。爲什麼?我需要優化這個查詢。重置AUTO_INCREMENT在MySQL中花費很長時間

+2

爲什麼你需要這個查詢?看起來你的表根本不需要自動增量主鍵。什麼是表格結構和這種重置的目的是什麼?無論如何,重建索引始終是耗費資源的操作。我希望你不是經常需要它 – 2010-04-21 10:03:02

+0

Hi Sharpnel, 非常感謝你的 你的快速反應。 在我們的網站中有用戶生成的數據和管理員生成的數據。我們的用戶數量也很大。 在這種情況下,如果管理員需要插入和更新批量數據,並且我們不想與用戶數據衝突,那麼我們通過重新設置自動保留ID增加和使用相同的插入和更新在幾個表中。由於我們正在執行批量插入和更新操作,因此我們正在將查詢寫入文本文件,並通過命令行執行該操作。 我希望您能理解我的問題。請幫忙 – user320343 2010-04-21 10:37:53

回答

5

ALTER TABLE導致重建整個表 - 如果您的表包含很多行,則可能需要很長時間。

如果您只需要提高auto_increment值的值,最快的方法是插入一個虛擬行(然後刪除該行,如果需要的話)。這隻需要幾分之一秒,而ALTER TABLE可能需要幾天時間處理大型表格。

例如,假設我有一個表與一個auto_increment ID列和其他列COL1,COL2 ...:

insert into autoinc_table set ID = 10000000; 
delete from autoinc_table where ID = 10000000; 
+0

這似乎沒有解決我的問題,這是一個int ID字段用完IDS。刪除行本身並沒有幫助,並且插入行似乎沒有觸發它重置其自動墾量值。 – 2012-08-03 21:10:27

+3

只有當您想要增加自動增量值時,此技巧纔有效。這聽起來像你想減少它。 – Martin 2012-08-08 16:17:13

5

用戶和管理員數據不能按ID進行區分,而是由另一字段。 如果你將一個id作爲一個抽象的標識符而沒有其他意義,它會爲你節省大量的時間和資源,相信我。

+0

你的意思是有另一個列,比如'user_type'或者有另一個帶有用戶目錄的表嗎? – Pathros 2018-02-22 20:52:19

+0

@Pathros取決於您的需求 – 2018-02-22 21:16:18

相關問題