2025-03-06

10.2.5.1 優(yōu)化INSERT語句

版本8.0
為了優(yōu)化插入速度,可以將多個小操作合并為一個大操作。理想情況下,建立一次連接,一次性發(fā)送多個新行的數(shù)據(jù),并將所有索引更新和一致性檢查推遲到最后進行 。

插入一行所需的時間由以下因素決定,其中數(shù)字表示大致比例:

  • 連接:(3)
  • 向服務(wù)器發(fā)送查詢:(2)
  • 解析查詢:(2)
  • 插入行:(1×行大?。?/li>
  • 插入索引:(1×索引數(shù)量)
  • 關(guān)閉連接:(1)

這里沒有考慮打開表的初始開銷,每個并發(fā)運行的查詢都會執(zhí)行一次打開表操作。

假設(shè)使用B樹索引,表的大小會使索引插入速度降低logN倍。

可以使用以下方法加快插入速度:

  • 如果要從同一客戶端同時插入多行數(shù)據(jù),可以使用帶有多個VALUES列表的INSERT語句,一次插入多行。這比使用單獨的單行INSERT語句要快得多(在某些情況下快很多倍)。如果要向非空表添加數(shù)據(jù),可以調(diào)整bulk_insert_buffer_size變量,使數(shù)據(jù)插入速度更快。請參見7.1.8節(jié) “服務(wù)器系統(tǒng)變量”。
  • 從文本文件加載表時,使用LOAD DATA。這通常比使用INSERT語句快20倍。請參見15.2.9節(jié) “LOAD DATA語句”。
  • 利用列的默認值特性。僅當要插入的值與默認值不同時,才顯式插入值。這可以減少MySQL必須進行的解析工作,提高插入速度。

有關(guān)InnoDB表的特定提示,請參見10.5.5節(jié) “InnoDB表的批量數(shù)據(jù)加載”。

有關(guān)MyISAM表的特定提示,請參見10.6.2節(jié) “MyISAM表的批量數(shù)據(jù)加載”。

10.2.5.2 優(yōu)化UPDATE語句

版本8.0
UPDATE語句的優(yōu)化方式與SELECT查詢類似,但額外增加了寫入操作的開銷。寫入速度取決于更新的數(shù)據(jù)量以及更新的索引數(shù)量,未發(fā)生變化的索引不會被更新。

另一種實現(xiàn)快速更新的方法是延遲更新操作,之后再連續(xù)進行多個更新。如果鎖定表,那么一次性執(zhí)行多個更新操作比逐個執(zhí)行要快得多。

對于采用動態(tài)行格式的MyISAM表而言,若將一行更新為總長度更長的數(shù)據(jù),可能會導致該行分裂。如果經(jīng)常執(zhí)行這類操作,偶爾使用OPTIMIZE TABLE語句就顯得尤為重要。請參見15.7.3.4節(jié) “OPTIMIZE TABLE語句”。

10.2.5.3 優(yōu)化DELETE語句

刪除MyISAM表中單行數(shù)據(jù)所需的時間與索引數(shù)量成正比。若要更快地刪除行,可以通過增大key_buffer_size系統(tǒng)變量的值來擴大鍵緩存的大小,相關(guān)內(nèi)容可查看7.1.1節(jié) “配置服務(wù)器”。

若要刪除MyISAM表中的所有行,使用TRUNCATE TABLE tbl_nameDELETE FROM tbl_name的速度更快。不過,截斷操作不具備事務(wù)安全性,如果在活躍事務(wù)或表處于鎖定狀態(tài)時嘗試執(zhí)行截斷操作,將會報錯。更多信息可參考15.1.37節(jié) “TRUNCATE TABLE語句”。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 鎖是計算機協(xié)調(diào)多個進程或線程并發(fā)訪問某一資源的機制。在數(shù)據(jù)庫中,除傳統(tǒng)的計算資源(如CPU、RAM、I/O等)的爭...
    薛延祥閱讀 260評論 0 0
  • 獲取關(guān)于分區(qū)的信息 本章討論MySQL 5.1.中實現(xiàn)的分區(qū)。關(guān)于分區(qū)和分區(qū)概念的介紹可以在18.1節(jié),“M...
    裘馬輕狂大帥閱讀 858評論 0 51
  • 一條查詢 SQL 語句是如何執(zhí)行的? 我們的程序或者工具要操作數(shù)據(jù)庫,第一步要做什么事情?跟數(shù)據(jù)庫建立連接 通信協(xié)...
    悠娜的奶爸閱讀 427評論 0 1
  • 關(guān)于Mongodb的全面總結(jié) MongoDB的內(nèi)部構(gòu)造《MongoDB The Definitive Guide》...
    中v中閱讀 32,305評論 2 89
  • 第11章 使用數(shù)據(jù)處理函數(shù) 11.1 函數(shù) 11.2 使用函數(shù) 用于處理文本串(如刪除或填充值,轉(zhuǎn)換值為大...
    歲月靜好淺笑安然閱讀 660評論 0 0

友情鏈接更多精彩內(nèi)容