更新過程:普通索引 更新的目標頁不在內存中可使用到change buffer。建議使用普通索引。html
change buffer:當須要更新一個數據頁時,若是數據頁在內存中就直接更新,而若是這個數據頁尚未在內存中的話,在不影響數據一致性的前提下,InnoDB 會將這些更新操做緩存在 change buffer 中,這樣就不須要從磁盤中讀入這個數據頁了。在下次查詢須要訪問這個數據頁的時候,將數據頁讀入內存,而後執行 change buffer 中與這個頁有關的操做。經過這種方式就能保證這個數據邏輯的正確性。
寫磁盤
的 IO 消耗(轉成順序寫),而 change buffer 主要節省的則是隨機讀磁盤
的 IO 消耗。
索引選擇異常和處理mysql
alter table SUser add index index2(email(6));
前綴索引長度:創建索引時關注的是區分度,區分度越高越好。由於區分度越高,意味着重複的鍵值越少。所以,咱們能夠經過統計索引上有多少個不一樣的值來判斷要使用多長的前綴。sql
mysql> select count(distinct left(email,4))as L4, count(distinct left(email,5))as L5, count(distinct left(email,6))as L6, count(distinct left(email,7))as L7, from SUser;
對身份證相似的索引,若是用前綴的話,區分度過低,就不合適,解決方案有幾種。數據庫
更新主要是寫內容和日誌,更新內容會先存入內存(沒有同步的叫髒頁),等時機(4種狀況)再寫入磁盤。緩存
全字段排序:併發
rowid排序:socket
隱式字符編碼轉換:函數
mysql> select d.* from tradelog l , trade_detail d where d.tradeid=CONVERT(l.tradeid USING utf8) and l.id=2;
第一類:簡單查詢長時間不返回工具
第二類:查詢慢oop
IO瓶頸解決方法:
主備切換,binlog格式
主備延遲的幾種狀況
策略
解決辦法:影響系統環境