Python進階(三十一)-往MySQL數據庫里添加數據,update和insert哪個效率高

      網友投稿 1760 2025-03-31

      #Python進階(三十一)-往MySql數據庫里添加數據,update和insert哪個效率高

      在編寫“Water Spider”過程中,遇到了批量更新數據的情況。自己剛開始時想使用mysql提供的cursor.executemany(operation, seq_of_params)方法執行批量更新操作,但是在寫sql語句時遇到了問題,不知道如何寫了。

      后來換種思路,考慮在執行數據插入之前先做數據表刪除操作,然后再執行寫入操作。因為自己臆想的是“數據插入的效率應該優于更細的效率。”因此,決定對于該問題進行實際考察。

      下面總結一下網絡上針對該問題大家給出的觀點

      1. “不考慮主鍵變動,索引變動,觸發器聯動的情況下,update比Insert效率高。”

      2. 這個很難說,相關因素太多了:存儲引擎類型、是否加索引(索引結構如B+樹索引或者哈希索引、索引更新、聚集索引還是非聚集索引)、約束(如唯一性約束、外鍵約束等)…

      還有提下三種插入語句(也有可能影響插入速度,從而難以判斷插入快還是更新快):

      MySQL中常用的三種插入數據的語句:

      insert into表示插入數據,數據庫會檢查主鍵,如果出現重復會報錯;

      replace into表示插入替換數據,需求表中有Primary

      Key,或者唯一索引,如果表中已經存在數據,則用新數據替換,如果沒有數據效果則和insert into一樣;

      insert ignore表示,如果表中如果已經存在相同的記錄,則忽略當前新數據。

      SQL中插入一個記錄需要的時間由下列因素組成,其中的數字表示大約比例:

      連接:(3)

      發送查詢給服務器:(2)

      分析查詢:(2)

      插入記錄:(1x記錄大小)

      插入索引:(1x索引)

      關閉:(1)

      如果我們每插入一條都執行一個SQL語句,那么我們需要執行除了連接和關閉之外的所有步驟N次,這樣是非常耗時的,優化的方式有一下幾種:

      在每個insert語句中寫入多行,批量插入

      將所有查詢語句寫入事務中

      利用Load Data導入數據

      每種方式執行的性能如下。

      ##Innodb引擎

      Python進階(三十一)-往MySQL數據庫里添加數據,update和insert哪個效率高

      InnoDB 給 MySQL 提供了具有事務(commit)、回滾(rollback)和崩潰修復能力(crash recovery capabilities)的事務安全(transaction-safe (ACID compliant))型表。InnoDB 提供了行鎖(locking on row level)以及外鍵約束(FOREIGN KEY constraints)。

      InnoDB 的設計目標是處理大容量數據庫系統,它的 CPU 利用率是其它基于磁盤的關系數據庫引擎所不能比的。在技術上,InnoDB 是一套放在 MySQL 后臺的完整數據庫系統,InnoDB 在主內存中建立其專用的緩沖池用于高速緩沖數據和索引。

      對于這種大數據量的更新情況,可以采用多線程的方式,每個線程更新100條數據,這樣就能提高更新的速度了。

      當然這里的100只是一個猜想值,哪個值合適,需要你測試才能得出。我想的話,應該能比單線要快些,至于能不能優化到2s,這個就不清楚了。

      同時需要注意你的連接池大小、線程池大小(核心線程數)。這些資源也會影響到你的更新速度(即這些資源不能出現競爭)

      最后,我對你需要更新這么大的數據量操作有一些疑問:

      這個操作是online的嗎?

      這個操作的返回是實時的嗎?

      對于大數據量的更新一般會做成一個異步的操作,而不需要是實時的。

      ![這里寫圖片描述](https://img-blog.csdnimg.cn/img_convert/f9c024e20306fb0e4e3e84a15aab3217.png)

      MySQL Python 數據庫

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:制造業企業生產管理模式(工廠管理和生產管理模式)
      下一篇:WPS表格怎么將表格橫過來圖文教程(wps怎么把豎著的表格數據橫過來)
      相關文章
      亚洲精品天堂在线观看| 亚洲AV无码一区二区三区系列| 4444亚洲国产成人精品| 亚洲日韩aⅴ在线视频| 亚洲日韩人妻第一页| 亚洲综合一区无码精品| 亚洲伊人精品综合在合线| 国产l精品国产亚洲区在线观看| 亚洲精品无码久久久久sm| 国产亚洲精品激情都市| 亚洲M码 欧洲S码SSS222| 亚洲国产香蕉人人爽成AV片久久| 亚洲Av无码国产情品久久| 一本色道久久88亚洲综合| 国产精品亚洲综合网站| 亚洲A丁香五香天堂网| 亚洲综合亚洲综合网成人| 亚洲色图综合在线| 国产精品亚洲视频| 亚洲国产精彩中文乱码AV| 伊人久久大香线蕉亚洲五月天| 久久久无码精品亚洲日韩软件 | 国产成人精品亚洲2020| 亚洲AV男人的天堂在线观看| 亚洲影院天堂中文av色| 一区二区亚洲精品精华液| 亚洲Av永久无码精品黑人| 久久精品国产亚洲av天美18| 蜜芽亚洲av无码一区二区三区| 亚洲日韩一中文字暮| 日本亚洲高清乱码中文在线观看 | 色老板亚洲视频免在线观| 亚洲色精品三区二区一区| 亚洲成a∨人片在无码2023| 亚洲av再在线观看| 亚洲精品无码高潮喷水在线| 亚洲爆乳无码一区二区三区| 4480yy私人影院亚洲| 色婷五月综激情亚洲综合| 色天使亚洲综合在线观看| 亚洲精品福利你懂|