快速複製一張大表討論

2021-08-22 18:44:07 字數 1257 閱讀 2708

有這樣的一類需求,快速複製一張表,而這張表的資料量又非常的大。比方說本來是分割槽表,要把它重新變成非分割槽表,怎麼能夠快速的完成這樣的操作呢?我下面給出2種大致的方法:

第一,就是利用ctas方式來建立一張新錶,當然要想加快速度,在資料庫不是force logging的前提下,可以使用nologging方式來建立表

sql> create table auction_auctions_bak

2 tablespace tbs_taobao

3 nologging

4 as

5 select * from auction_auctions;

table created.

sql> select count(*) from auction_auctions;

count(*)

----------

4179779

sql> select count(*) from auction_auctions_bak;

count(*)

----------

4179779

在建立完成表以後,要注意將表的屬性重新變成logging:

sql> select logging from tabs where table_name='auction_auctions_bak';

log---

nosql> alter table auction_auctions_bak logging;

table altered.

最後將表名更改過來,建立一下新的索引,然後就可以了。

sql> drop table auction_auctions;

table dropped.

sql> rename auction_auctions_bak to auction_auctions;

table renamed.

第二,在原理上,它其實和第一種方式差不多,就是阻止資料庫記錄日誌來加快速度,大概過程如下:

1、exp出原表(建議compress=n)

2、drop 原表

3、以nologging的方式,新建與原表同名的空表

4、imp原表至空表中,注意要把ignore設定為y

5、更改新錶的屬性為logging

我這次分別都對兩種方式做了測試,結果第二種方式遠遠快於第一種方式,大概是其10倍的速度。注意以上兩種方式都是在資料庫沒有force logging的前提下完成的。如果資料庫被force logging了,那麼怎樣才能加快複製速度,這個大家可以說說。

mysq優化之(快速複製一張大資料的表)

一千萬條資料只花了兩分多鐘,這裡忘記截圖了 關閉了自動提交 關閉了唯一性檢查 load比傳統的insert效率高很多 蠕蟲複製500萬條資料只要1分多鐘的優化方式 innodb儲存引擎 關閉自動提交 set autocommit 0 關閉唯一性檢查 set unique checks 0 導完資料記...

同步一張大表技術實現方案

目錄 1 背景 2 技術方案 3 技術方案修正 3.2 改寫分頁sql 4 參考資料 表中有乙個主鍵字段,主鍵id是有時間特性,按照時間公升序增長的,可以認為id是雪花演算法生成的id,目前表中有1億條資料,我們需要把這1億條資料同步到es中。我們將全表資料看成是乙個大的資料集,從邏輯上進行分頁,每...

如何快速查詢一張大表的前面資料

公司生產上面有一張表,裡面資料有 3486764條,每次想去查詢最新的幾條資料時總是很慢,以下為使用的語句 select from txn fin txn log t order by t.id desc 因為有order by語句會很慢,查詢出來將近1分鐘才能出來,有時候更長 經過腦海裡想了之後,...