大表更改默認值使用alter table不重建表,直接修改.frm
在mysql中執行很大部分的修改動作,都需要重建一個表,然后把數據放進去,最后刪除舊的表!有時候要是有索引的列上進行大批且頻繁的表的時候會導致系統的性能嚴重下降,這里可以在修改SQL上做部分調整,減輕相關的構建結構帶來的系統壓力問題! www.bitsCN.com
例如 在修改一個表的默認值為8的時候,常規做法為:
(1):alter table modes modify column dept tinyint(3) not null default 8;
這里通過一些show status分析出,每次都要做大量的句柄的讀取和插入操作,類似于從新構建了一張新表的樣式,這樣在一些大表,上千萬的數據量會出現瓶頸問題!
這里我們需要靈活知道mysql的相關默認值實際是放在相關的表結構.frm文件中;我們可以不經過數據層,可以直接調整!上述的modify column會導致相關的表進行拷貝操作,不利于系統的正常穩定運行,可以使用下面方式;
(2):alter table modes alter column dept set default 8;
這里只是更改了相關的frm文件,沒有改動表,因此速度很快的即可完成;
總結:在此我們可以注意到相關的alter table后面跟不同形式的命令,可以對數據產生了不同程度的影響,這里還有一個change column操作也是不一樣的!
bitsCN.com聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com