二.innodb的索引模型
三.常見問題及答案
優點:雜湊表以key-value 儲存,這種結構適合等值查詢的場景,比如memached以及其他的nosql 引擎。
缺點:做區間查詢,需要全部掃瞄
有序陣列只適用於靜態儲存引擎,比如儲存一些不會修改的資料
優點:有序陣列在 等值查詢和區間查詢的時候表現都不錯。
我們假設有儲存user 的陣列,按照身份證遞增排序。
等值查詢:參照id_card_n2 對應的名字, 用二分法就能得到,時間複雜度o(log(n))
區間查詢:查詢身份證號[id_card_x, id_card_y] 區間的user,先用二分法找到id_card_x, 然後向右遍歷,直到查到第乙個大於id_card_y的身份證號,推出迴圈。
缺點:更新資料的時候比較麻煩,往中間插入乙個記錄就必須挪動後面所有的記錄,成本太高
二叉搜尋樹特點:每個節點的左兒子小於父節點,父節點又小於右兒子。但是實際上大多數的資料庫儲存卻並不使用二叉樹。索引不止存在記憶體中,還要寫到磁碟上。(100 萬節點的平衡二叉樹,樹高20, 一次查詢可能需要訪問20個資料塊, 讀取磁碟20次)這個比較慢,所以 盡量使用n 叉樹。
n叉樹在讀寫上的效能優點 以及適配磁碟的訪問模式,被廣泛的應用在資料庫引擎中。
innodb 使用的b+ 樹索引模型, 所有的資料都儲存在 b+ 樹表中。 每乙個索引在innodb 裡面對應一顆b+ 樹。
r1~r5 的(id,k) 值分別為(100,1),(200,2),(300,3),(500,5),(600,6)mysql> create table t(
id int primary key,
k int not null,
name varchar(16),
index (k))engine=innodb;
每乙個索引 包含多個page, 下面看一下 b+ tree simplified level
有什麼場景是比較適合用業務字段直接做主鍵的呢?
典型的kv 場景: 1. 只有乙個索引; 2 該索引 必須是唯一索引。
實戰mysql45講 MySQL實戰45講
作者簡介 林曉斌,網名 丁奇 前阿里資深技術專家,曾負責阿里雲rds核心開發團隊和運維團隊,並推動了alisql分支開源。作為活躍的mysql社群貢獻者,丁奇專注於資料儲存系統 mysql原始碼研究和改進 mysql效能優化和功能改進,熱衷於解決mysql疑難問題。課程亮點 你將獲得 前阿里資深技術...
mysql實戰45講筆記 07
07 行鎖功過 怎麼減少行鎖對效能的影響 mysql的行鎖是在引擎層由各個引擎自己實現的,不是所有資料庫都支援行鎖比如myisam 行鎖就是針對資料表中行記錄的鎖。在innodb事務中,行鎖是在需要的時候才加上的,但並不是不需要了就立刻回訪,而是等到事務結束時才釋放,這就是兩階段鎖協議。因此,如果事...
最新MySQL實戰45講教程
目錄 01.基礎架構 一條sql查詢語句是如何執行的?html 01.基礎架構 一條sql查詢語句是如何執行的?01.基礎架構 一條sql查詢語句是如何執行的?pdf 02.日誌系統 一條sql更新語句是如何執行的?html 02.日誌系統 一條sql更新語句是如何執行的?02.日誌系統 一條sql...