最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Mysql-Insert插入過慢的原因記錄和解決方案

 更新時間:2023年08月30日 15:34:11   作者:胡安民  
這篇文章主要介紹了Mysql-Insert插入過慢的原因記錄和解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

Mysql Insert插入過慢的原因

場景

先來說下業(yè)務場景, A單位每天下發(fā)全量數(shù)據(jù)5萬數(shù)據(jù)左右,我們需要將這5萬條數(shù)據(jù)處理到主表中以及日志表中

我們現(xiàn)在的邏輯是,先將數(shù)據(jù)每次100條批量修改或者插入到主表中, 然后我們通過事件監(jiān)聽將每次插入或者修改的動作都記錄到日志表中

問題: 因為我們插入日志表的時候是每次處理一條這樣就導致了5萬條日志數(shù)據(jù),一個一個插入非常耗時,抱著能提升一點就提升一點的想法,我們看看插入還能優(yōu)化嗎?

先來說一下: Mysql中單條語句原子性的,所以高并發(fā)情況下不會有安全性問題

說說插入會慢的影響因素

  • Mysql插入緩存(bulk_insert_buffer_size 默認是8M)
  • 每條數(shù)據(jù)在插入的時候都要驗證是否違反表中的約束條件(主鍵,唯一等)
  • 構建新數(shù)據(jù)的索引
  • innodb中,數(shù)據(jù)通常都是先寫緩存,再寫事務日志,再寫入數(shù)據(jù)文件
  • Mysql 每秒最大支持16384并發(fā) ,但是默認只有151可以設置max_connections數(shù)量
  • 服務器性能,cpu,硬盤,網(wǎng)絡, 網(wǎng)絡數(shù)據(jù)傳輸 ,代碼解析
  • 數(shù)據(jù)庫事務影響

解決辦法

先設置mysql的插入緩存bulk_insert_buffer_size=100M,確保一次能插入1000條數(shù)據(jù)

然后使用List方式記錄需要插入的數(shù)據(jù)當達到1000條之后我們批量一次性插入

insert into tablename values('xxx','xxx'),('yyy','yyy'),('zzz','zzz')...... 

然后在清空List ,插入的過程中我們可以異步,不用等待結果的返回 ,通過上面的方案, 插入100萬數(shù)據(jù)幾十秒就完事了

為什么要這樣解決呢?

因為批量插入其實就是訪問一次數(shù)據(jù)量告訴數(shù)據(jù)庫我需要執(zhí)行這1000條的插入,而不是訪問1000次數(shù)據(jù)庫告訴數(shù)據(jù)庫我要執(zhí)行1條的插入所以使用批量插入大大的縮減客戶端與數(shù)據(jù)庫之間的連接、關閉等消耗 , 所以我們在上面的方案中使用一次提交批量數(shù)據(jù)的更新的語句,那么還有沒其他的方式呢?

MySQL 的事務自動提交模式默認是開啟的,其對 MySQL 的性能也有一定得影響。

也就是說如果你執(zhí)行1000 條插入語句,MySQL 就會提交 1000 次事物,這大大影響了插入數(shù)據(jù)的速度。

我們還可以在代碼中,手動開啟事物也就是相當于希望事物內(nèi)執(zhí)行的語句要作為一個“不可分割”的整體去執(zhí)行的任務當所有任務完畢后在提交事物,當然這樣是沒有批量插入快的但是也能節(jié)約不少時間的

MySQL數(shù)據(jù)庫Insert語句慢SQL處理

問題描述

insert into …普通的插入語句,經(jīng)常出現(xiàn)耗時2s以上

數(shù)據(jù)狀態(tài)

1.表數(shù)據(jù)量大,每天產(chǎn)生200萬條數(shù)據(jù)

2.高并發(fā)插入

問題解決

1.由于表中數(shù)據(jù)量龐大,建議數(shù)據(jù)歸檔處理,冷熱處理

2.表中有過多索引,當數(shù)據(jù)insert時,索引會重排產(chǎn)生太多的io操作。導致緩慢,有必然要的只保留主鍵。

3.表的數(shù)據(jù)庫引擎,默認InnerDB,若數(shù)據(jù)不重要,可以使用MyISAM

4.注意字段text使用,內(nèi)存過大會引起表膨脹,影響插入和查詢效率

總結

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • mysql 5.7.17 免安裝版配置方法圖文教程(windows10)

    mysql 5.7.17 免安裝版配置方法圖文教程(windows10)

    這篇文章主要為大家詳細介紹了windows10下mysql 5.7.17 免安裝版配置方法圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • mysql 表維護與改造代碼分享

    mysql 表維護與改造代碼分享

    當數(shù)據(jù)庫中表的數(shù)量比較多時,不利于維護,本文將以此問題進行詳細介紹如何維護mysql表,與如何修改mysql表
    2012-11-11
  • Mysql用戶權限分配實戰(zhàn)項目詳解

    Mysql用戶權限分配實戰(zhàn)項目詳解

    用戶是數(shù)據(jù)庫的使用者和管理者,MySQL通過用戶的設置來控制數(shù)據(jù)庫操作人員的訪問與操作范圍,這篇文章主要給大家介紹了關于Mysql用戶權限分配實戰(zhàn)項目的相關資料,需要的朋友可以參考下
    2023-12-12
  • Mysql創(chuàng)建表以及數(shù)據(jù)庫crud語句舉例詳細講解

    Mysql創(chuàng)建表以及數(shù)據(jù)庫crud語句舉例詳細講解

    MySQL作為關系型數(shù)據(jù)庫管理系統(tǒng),提供了豐富的數(shù)據(jù)操作功能,其中CRUD(創(chuàng)建、讀取、更新、刪除)是基本的操作方式,這篇文章主要介紹了Mysql創(chuàng)建表以及數(shù)據(jù)庫crud語句的相關資料,需要的朋友可以參考下
    2025-08-08
  • docker安裝MySQL報錯端口被占用問題解決辦法

    docker安裝MySQL報錯端口被占用問題解決辦法

    docker部署mysql容器時,最常見的啟動失敗原因之一是宿主機的3306端口被占用,這篇文章主要介紹了docker安裝MySQL報錯端口被占用問題解決辦法的相關資料,文中將解決的辦法介紹的非常詳細,需要的朋友可以參考下
    2026-03-03
  • MySQL 分表優(yōu)化試驗代碼

    MySQL 分表優(yōu)化試驗代碼

    我們的項目中有好多不等于的情況。今天寫這篇文章簡單的分析一下怎么個優(yōu)化法。
    2010-04-04
  • 一文詳解如何在Mycat中配置多個Schema

    一文詳解如何在Mycat中配置多個Schema

    在分布式數(shù)據(jù)庫架構中,Mycat?作為一個中間件,提供了強大的數(shù)據(jù)分片和路由能力,本文將詳細介紹如何在?Mycat?中配置多個?Schema,以滿足不同業(yè)務模塊的數(shù)據(jù)隔離需求,希望對大家有所幫助
    2025-05-05
  • 揭開SQL中NULL的神秘面紗

    揭開SQL中NULL的神秘面紗

    表的字段默認允許存放NULL值,這意味著,您在插入記錄或者更新記錄時,可以不為該字段指定值,此時該字段將存儲NULL值,這篇文章將揭開SQL中NULL的神秘面紗。這個問題可能困擾著很多初級開發(fā)者
    2023-01-01
  • MySQL數(shù)據(jù)庫對敏感數(shù)據(jù)加密及解密的實現(xiàn)方式

    MySQL數(shù)據(jù)庫對敏感數(shù)據(jù)加密及解密的實現(xiàn)方式

    這篇文章主要介紹了MySQL數(shù)據(jù)庫對敏感數(shù)據(jù)加密及解密的實現(xiàn)方式,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值 ,需要的朋友可以參考下
    2020-03-03
  • mysql如何將查詢結果插入到另一張表中

    mysql如何將查詢結果插入到另一張表中

    這篇文章主要介紹了mysql如何將查詢結果插入到另一張表中問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10

最新評論

高淳县| 广昌县| 古丈县| 博湖县| 林甸县| 青河县| 玉山县| 新绛县| 乌拉特前旗| 北海市| 梁河县| 栖霞市| 旬阳县| 花莲市| 隆尧县| 平昌县| 镇安县| 星子县| 夏河县| 桓台县| 南投市| 宁夏| 津南区| 德庆县| 柳河县| 蕉岭县| 林西县| 渭源县| 四会市| 洛阳市| 中西区| 宜黄县| 江华| 朝阳市| 托克托县| 灵璧县| 阳城县| 墨竹工卡县| 定南县| 苏州市| 浙江省|