由批量插入和單條插入的效能引起的反思

2021-09-26 06:55:42 字數 1216 閱讀 7997

批量插入比一條一條的插入效能高原因如下:

批量插入sql執行效率高的主要原因是合併後日誌量(mysql的binlog和innodb的事務讓日誌)

減少了,降低日誌刷盤的資料量和頻率,從而提高效率。通過合併sql語句,同時也能減少sql語句解析的次數,減少網路傳輸的io。

ps:對於innodb,所有未提交的的二進位制日誌會被記錄到乙個快取中去,等該事物提交時,直接將快取中的二進位制日誌寫入二進位制日誌檔案中去,該快取的大小由

binlog_cache_size決定,二進位制日誌記錄了對mysql資料庫執行更改的所有操作,但是不包括select和show這類操作,

因為這類操作對資料本身並沒有修改,二進位制日誌的功能:恢復,複製,審計。開啟二進位制當然會對效能有所影響,二進位制日誌並不是每次寫的時候都同步到磁碟,

引數sync_binlog表示多少次事物會從到磁碟中,如果是批量插入,表示只有1個事物

mysql中常見的日誌檔案有:

錯誤日誌:對mysql的啟動,執行,關閉過程進行了記錄

二進位制日誌:j記錄了對mysql資料庫執行更改的所有操作,不包括select和show這種

慢查詢日誌:可以在mysql啟動時,設乙個閾值,將執行時間超過該值的所有sql語句都記錄到慢查詢日誌檔案中

查詢日誌:記錄了所有對mysql的請求資訊

innodb儲存引擎中的檔案:

redolog

undolog

表空間檔案:innodb採用將儲存的資料按表空間進行存放

undo日誌記錄某資料被修改前的值,可以用來在事務失敗時進行rollback;redo日誌記錄某資料塊被修改後的值,可以用來恢復未寫入data file的已成功事務更新的資料。下面的示例來自於楊傳輝《大資料分布式儲存系統 原理解析與架構實踐》,略作改動。

例如某一事務的事務序號為t1,其對資料x進行修改,設x的原值是5,修改後的值為15,那麼undo日誌為,redo日誌為。

二進位制日誌檔案和redolog的區別:

二進位制日誌會記錄所有與mysql資料庫有關的日誌記錄,包括其他儲存引擎的日誌,而redolog只記錄innodb的

二進位制日誌記錄的是乙個事物的具體操作內容,如update t set a=1,而redolog記錄的是物理改變,如上述例子

寫入時間不同,二進位制日誌檔案盡在事物提交前進行提交,而在事物進行的過程中,卻不斷的有重做日誌被寫入到重做日誌檔案中(因為重做日誌記錄的是改變,因此是在事物執行過程中記錄每乙個語句的改變,而二進位制日誌只是記錄操作語句)

pymysql單條插入資料和批量插入資料

一 單條插入資料 usr bin python3 import pymysql 開啟資料庫連線 db pymysql.connect localhost testuser test123 testdb 使用cursor 方法獲取操作游標 cursor db.cursor sql 插入語句 裡面的資料...

MySql批量插入的效能比較

為了提高效能,需要對mysql批量插入進行一次性對對比,下面是測試完後的結果,存檔以備後查。1.測試結果 記錄條數 迴圈插入,乙個事務提交insert00 ms 批量函式插入 insert01 ms 乙個inser多個values insert02 ms 多個insert拼接 insert03 ms...

單鏈表的插入和刪除

常見的資料結構只有兩種 1 陣列 2 鍊錶 陣列中的元素是連續儲存的,而鍊錶的元素則可以不連續,只需要有指標指向下乙個元素即可。因此鍊錶適合儲存插入刪除比較頻繁的一組資料。另外鍊錶的儲存空間是動態的,不必預先分配指定的空間大小。下面介紹鍊錶的幾種常見操作。首先先定義乙個鍊錶 struct linkl...