MySQL中大資料表增加字段,增加索引實現

2022-05-02 16:27:09 字數 1532 閱讀 1501

普通的新增欄位sql

alter

table

`table_name`

addcolumn

`num`

int(10) not

null

default

0after

`addtime`;

普通的新增索引sql

alter

table

`table_name`

addindex

`num` (`num`) ;

但是線上的一張表如果資料量很大呢,執行加欄位操作就會鎖表,這個過程可能需要很長時間甚至導致服務崩潰,那麼這樣操作就很有風險了。

在網上查詢的給 mysql 大表加字段的思路如下:

①建立乙個臨時的新錶,首先複製舊表的結構(包含索引)

②給新錶加上新增的字段

③把舊表的資料複製過來

④刪除舊表,重新命名新錶的名字為舊表的名字

實現過程大概就是這樣,下面我會附帶我實現的sql:

① 建立乙個臨時的新錶,首先複製舊表的結構(包含索引)

create

table new_table like old_table;

② 給新錶加上新增的字段 增加索引

alter

table

`table_name`

addcolumn

`num`

int(10) not

null

default

0after

`addtime`;

alter

table

`table_name`

addindex

`num` (`num`) ;

③ 把舊表的資料複製過來

insert

into new_table(id,name,content,addtime) select

id,name,content,addtime

from old_table;

注意:執行這步的時候,可能這個過程也需要時間,這個時候有新的資料進來,所以原來的表如果有欄位記錄了資料的寫入時間就最好了,可以找到執行這一步操作之後的資料,並重複匯入到新錶,直到資料差異很小。不過還是會可能損失極少量的資料。所以,如果表的資料特別大,同時又要保證資料完整,最好停機操作。選取的乙個低峰期時間操作的,減少資料差距。

④ 舊表的名字修改為別的名,重新命名新錶的名字為舊表的名字

留乙個備用表,可以等新錶完全沒問題再刪除

總結:

一般情況下,十幾萬的資料量,可以直接進行加欄位操作。如果這個表資料量太大所以需要其他方法操作。以上就是關於在mysql大表中加欄位加索引的實現思路和步驟。

為oracle的資料表建立自增字段

大致思路 在oracle中建立乙個存放增長值的物件,然後每次向表中插入資料時都呼叫這個物件的nextval,這樣就實現了自增。第一步 建立乙個測試表 t userinfo create table t userinfo c id number 10 c name varchar2 58 第二步 建立...

mysql大資料表匯入匯出

客戶那一台流量分析裝置需要給更換成新裝置,但要求保留之前的流量分析資料,檢視了一下流量分析表情況,發現有幾張分鐘粒度的資料表資料量達到幾億條以上,資料庫使用的是mysql,使用mysql 的匯入匯出工具mysqldump是沒希望了,只能把幾個大資料量的表挑出來單獨處理,小資料量的表就用mysqldu...

MySQL 大資料表新增索引

為了提公升資料庫的查詢速度需要在資料表中的字段上新增索引,但是表中的資料量很大的時候,直接新增索引會導致資料庫崩潰或者鎖表時間太長而影響對資料庫的操作 建立一張臨時的新錶,複製舊表的結構及其索引 create table new table like old table 新錶中新增新增的字段,增加索...