Peter 工程日誌

如何改善MySQL 5.7新增資料的速度

前言

前置環境

MySQL資料庫引擎介紹

在討論增加資料速度之前,需要先探討MySQL兩個常用的資料庫引擎,因為選擇不同的資料庫引擎,在新增資料的速度上也是會有差異的。

MyISAM

MyISAM限制

InnoDB

InnoDB限制

資料庫引擎的選擇方向與重點

插入資料步驟

插入資料效能改善

bulk_insert_buffer_size的修改

 

 

 

 

如上附圖可以知道此設定的相關資訊,下面有幾點此設定的特性。

bulk_insert_buffer_size設定

如下的SQL指令可以設定此bulk_insert_buffer_size值

MyISAM插入資料優化

InnoDB插入資料優化

因為InnoDB所支援的特性較多,因此需要將transaction commit,UNIQUE檢查與foreign key檢查關閉之後,再寫入資料會加速插入資料的時間。

關閉transaction auto commit check


set autocommit=0;

SQL query statement;

commit;

關閉unique checks


set unique_checks=0;

SQL query statement;

set unique_checks=1;

關閉foreign key checks


set foreign_key_checks=0;

SQL query statement;

set foreign_key_checks=1;

LOAD DATA使用方式

如下是使用LOAD DATA方式將用電量的CSV檔案匯入到資料表裡面

資料表的綱要如下:

欄位名稱欄位型態編碼與排序
electricIDVARCHAR(15)utf8mb4_unicode_ci
datedatetime
mwhdouble

LOAD DATA相關SQL語法如下:


LOAD DATA LOCAL INFILE '/path/to/electric_data.csv'

INTO TABLE electric_data_table

FIELDS TERMINATED BY ','

ENCLOSED BY '"'

LINES TERMINATED BY '\n'

IGNORE 1 ROWS;

由上述的SQL插入資料語法,我們可以得到如下的資訊:

結論

評估項目名稱MyISAMInnoDB
需要全文字搜尋
(full-text search)
Yes5.6.4開始支援
需要交易
(transactions)
Yes
需要頻繁的查詢
(frequent select queries)
Yes
需要頻繁的新增,修改與刪除
(frequent select, insert,update)
Yes
需要資料表在插入同時,也有良好的查詢效果Yes
需要關聯式資料表設計
(foreign keys等)
Yes

參考資料

作者群

Exit mobile version