mysql 索引 内存_mysql索引【第三篇】
##innodb引擎的數據是按頁為單位的,當需要讀一條記錄時,并不是將這個記錄本身從磁盤中讀取出來,而是以頁為單位將整個頁讀取到內存中,每個頁默認大小為16kb
數據查詢過程:? 磁盤---->內存---->返回結果
數據更新過程: change buffer ---->當有查詢,更新到磁盤------->內存-------->返回結果? ?###這個過程不確定對不對啊,如果有不對的話? 大佬可以留言指出,我是這么理解的
唯一索引和普通索引的性能差異:
在查詢過程中,二者的性能幾乎相同:
唯一索引,檢索到數據后,由于數據的唯一性,不會繼續向下查詢,直接返回結果。
普通索引,檢索到需要的數據后,需要繼續向下檢索,直到檢索到不滿足條件位置。需要多做的只是一次“查找和判斷下一條記錄”,只需要一次指針尋找和計算(多叉樹模型)。
在更新過程中:
唯一索引由于數據的唯一性,所有的更新操作都要先判斷這個操作是否違反唯一性約束,而這必須需要將數據頁讀入內存才可以判斷,所以不會用到change buffer, 在數據從磁盤讀入內存涉及隨機IO的訪問,是數據庫成本最高的操作之一。
普通索引用到了change buffer,減少了隨機磁盤訪問,對更新的性能會有明顯提升。
change buffer:當需要更新一個數據頁時,如果數據頁在內存就會直接更新,如果不在的話,在不影響數據一致性的前提下,會將DML操作緩存在change buffer中,就不需要從磁盤中讀取這個數據頁。下次需要訪問這個數據頁時,將數據頁讀入內存,然后執行change buffer中與這個頁有關的操作。(持久化的數據,也會寫入到磁盤)
change buffer好處:更新記錄在change buffer? 減少了磁盤的隨機讀; 數據讀入內存需要占用buffer poll,用到change buffer緩存還能減少占用內存
merge:將change buffer操作寫到原數據頁得到最新結果,這個過程稱為merge。除了訪問這個數據頁會觸發merge外;系統后臺線程也會定期merge;數據庫正常關閉,也會merge
change buffer使用場景:
寫多讀少的業務,比如:賬單、日志類
原因:讀數據的時候會觸發merge,讀的越少,change buffer緩存的操作越多,收益就越大。而讀頻繁的業務會頻繁觸發merge,隨機訪問IO次數不會減少,反而增重了change? buffer維護代價。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的mysql 索引 内存_mysql索引【第三篇】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java增删改一键生成_easyCode
- 下一篇: 不采取任何措施 盒盖_得了癌症如果不化疗