中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

學習筆記 12 數據庫索引和鎖

發布時間:2020-08-02 23:28:09 來源:網絡 閱讀:492 作者:仕強君 欄目:MySQL數據庫

索引是為了提高查詢的效率。
常見的索引模型有hash索引,有序數組,二叉樹索引。
hash索引:hash表是一種以鍵值對存儲的數據結構,適用于等值查詢場景;由于數據不是有序存儲的,所以范圍查詢時效率比較差。
有序數組:適用于靜態存儲引擎,數據不會發生改變的場景,等值查詢和范圍查詢的效率都很好。
N叉數索引:為了讓查詢盡量少地讀磁盤,不適用二叉樹,使用N叉樹。

INNODB使用B+索引樹模型,表按照主鍵的順序以索引的形式存放,即索引組織表。索引分為主鍵索引和非主鍵索引(二級索引)。
非主鍵索引查詢數據需要回表,覆蓋索引由于要查詢的值已經存在于索引中,因此不需要回表,減少樹的搜索次數,提升性能。
B+樹索引結構,可以使用最左前綴原則來定位數據。
建立聯合索引時,注意安排字段的順序,盡量使得需要維護的索引的數目最少。
MySQL 5.6引入索引下推優化,在索引遍歷的過程中,對索引包含的字段先做判斷,過濾不滿足條件的記錄,減少回表次數。

MySQL鎖的類型:
全局鎖,表鎖,行鎖。
全局鎖對數據庫整個實例加鎖,flush table with read lock,在邏輯備份時使用。
表級鎖:表鎖和元數據鎖
表鎖,lock tables *** read/write
元數據鎖
學習筆記 12 數據庫索引和鎖

MySQL在線對表DDL操作時,如果有未提交的事務,也會造成數據庫堵塞。
在線添加索引:
alter table test add index index_id(column1) algrithm=inplace;
如下online ddl總結來源于博客:
https://www.cnblogs.com/beef/p/7376035.html
https://dev.mysql.com/doc/refman/5.6/en/innodb-online-ddl.html
online ddl主要包括3個階段,prepare階段,ddl執行階段,commit階段,rebuild方式比no-rebuild方式實質多了一個ddl執行階段,prepare階段和commit階段類似。下面將主要介紹ddl執行過程中三個階段的流程。

3.1、Prepare階段:

①:創建新的臨時frm文件(與InnoDB無關) ②:持有EXCLUSIVE-MDL鎖,禁止讀寫 ③:根據alter類型,確定執行方式(copy,online-rebuild,online-norebuild)

假如是Add Index,則選擇online-norebuild即INPLACE方式             

④:更新數據字典的內存對象

⑤:分配row_log對象記錄增量(僅rebuild類型需要) ⑥:生成新的臨時ibd文件(僅rebuild類型需要)

3.2、ddl執行階段:

①:降級EXCLUSIVE-MDL鎖,允許讀寫

②:掃描old_table的聚集索引每一條記錄rec ③:遍歷新表的聚集索引和二級索引,逐一處理

④:根據rec構造對應的索引項

⑤:將構造索引項插入sort_buffer塊排序 ⑥:將sort_buffer塊更新到新的索引上 ⑦:記錄ddl執行過程中產生的增量(僅rebuild類型需要) ⑧:重放row_log中的操作到新索引上(no-rebuild數據是在原表上更新的) ⑨:重放row_log間產生dml操作append到row_log最后一個Block

3.3、commit階段:

①:當前Block為row_log最后一個時,禁止讀寫,升級到EXCLUSIVE-MDL鎖 ②:重做row_log中最后一部分增量 ③:更新innodb的數據字典表 ④:提交事務(刷事務的redo日志) ⑤:修改統計信息 ⑥:rename臨時idb文件,frm文件 ⑦:變更完成

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

公安县| 安泽县| 龙州县| 石林| 石景山区| 深水埗区| 突泉县| 治多县| 镇坪县| 舟山市| 贵南县| 新巴尔虎左旗| 永康市| 西昌市| 大宁县| 溆浦县| 榆社县| 繁峙县| 宁河县| 黄浦区| 齐齐哈尔市| 菏泽市| 寿宁县| 宁波市| 黑龙江省| 蒙城县| 五大连池市| 安泽县| 习水县| 丰城市| 天津市| 恩平市| 肇东市| 元氏县| 定陶县| 隆子县| 泰兴市| 桃江县| 台湾省| 普洱| 时尚|