MySQL優化之海量資料批量插入

2021-09-18 04:42:47 字數 932 閱讀 5476

問:為何對同乙個表的插入多執行緒會比單執行緒快?同一時間對乙個表的寫操作不應該是獨佔的嗎?

答:在資料裡做插入操作的時候,整體時間的分配是這樣的:

鏈結耗時 (30%)

傳送query到伺服器 (20%)

解析query (20%)

插入操作 (10% * 詞條數目)

插入index (10% * index的數目)

關閉鏈結 (10%)

從這裡可以看出來,真正耗時的不是操作,而是鏈結,解析的過程。

mysql插入資料在寫階段是獨佔的,但是插入一條資料仍然需要解析、計算、最後才進行寫處理,比如要給每一條記錄分配自增id,校驗主鍵唯一鍵屬性,或者其他一些邏輯處理,都是需要計算的,所以說多執行緒能夠提高效率。

分區分表後使用多執行緒插入。

使用preparedstatement介面允許資料庫預編譯sql語句,以後只需傳入引數,避免了資料庫每次都編譯sql語句,因此效能更好。

string sql =

"insert into testdb.tuser (name, remark, createtime, updatetime) values (?, ?, ?, ?)"

;for

(int i =

0; i < m; i++)

pstmt.

executebatch()

;//執行批處理

pstmt.

close()

; mybroker.

freeconnection

(conn)

;//連線歸池

}

使用多值插入sql,sql語句的總長度減少,即減少了網路io,同時也降低了連線次數,資料庫一次sql解析,能夠插入多條資料。

在乙個事務中提交大量insert語句可以提高效能。

參考資料:

Mysql海量資料優化

1.選擇合適的儲存引擎 兩個儲存引擎 myisam 和 innodb myisam合適count 但寫效能不好 innodb合適併發讀寫 事物 2.優化字段資料 3.為字段建立索引 4.避免使用select 5.使用 enum 而不是 varchar 6.盡可能的使用 not null 7.固定長度...

mysql批量插入資料 MySQL中批量插入資料

例1 方法一 sql語句操作 delimiter 以delimiter來標記用 表示儲存過程結束 create procedure pre 建立pre 儲存方法 begin declare i int 定義i變數 set i 2 while i 53 do insert into lineinfo ...

MySql海量資料儲存和優化

mysql 是最流行的關係型資料庫軟體之一,由於其體積小 速度快 開源免費 簡單易用 維護成本低等,在集群架構中易於擴充套件 高可用,因此深受開發者和企業的歡迎。1 mysql體系架構 2 mysql執行機制 3 mysql儲存引擎 儲存引擎在mysql的體系架構中位於第三層,負責mysql中的資料...