綠色代表值,黃色代表指標,藍色為磁碟塊,灰色表示沒有對應區域的資料。
磁碟塊1中,p1指向數值小於17的磁碟塊,p2指向數值大於17小於35的磁碟塊,p3指向大於35的磁碟塊
尋找值為29:
磁碟塊1中,29大於17小於35,由磁碟塊1的p2指向磁碟塊3
磁碟塊3中,29大於36小於30,由磁碟塊3的p2指向磁碟塊8
磁碟塊8中,29等於29,找到了該值
主鍵自動建立索引
頻繁作為查詢條件的字段
查詢中與其他表建立外來鍵關係的字段,外來鍵關係建立索引
相比於單鍵索引,高併發場景中更傾向於建立復合索引
查詢中排序的字段,排序欄位若通過索引訪問將大大提高排序速度
查詢中統計或者分組的字段
頻繁更新(增刪改)的字段不建立索引
where條件用不到的字段不建立索引
表記錄很少
資料重複且分布均勻的表字段不應該建立索引,即:如果該資料列包含許多重複的內容,為他建立索引不會起到很大作用。(比如:14億人的國籍,民族不適合建立索引;可列舉的xx型別、xx標誌、xx類別、xx狀態、true/false標誌都不適合建立索引。主鍵id自動建立索引:主鍵保證每個資料的主鍵值不一樣,在b+樹結構中能建立比較稠密的樹結構,從而快速查詢到每個id對應的資料,所以建立索引應該參照主鍵索引的思想)
id select_type table partitions type possible_keys key key_len ref rows filtered extra表的讀取順序
id:相同時認為是一組,table從上往下執行;不同時先大後小;(衍生=derived, select * from(select * from a) b,b就是衍生表)
資料讀取操作的操作型別
select_type
******:簡單的select查詢,查詢中不包含子查詢或者union
primary:若查詢中包含任何複雜的子部分,最外層查詢被標記為primary
subquery:select或者where列表中包含了子查詢
from列表中包含的子查詢被標記為derived,mysql會遞迴這些子查詢,把結果放在臨時表裡面
union:若第二個select出現在union之後,則被標記為union;若union包含在from自居的子查詢中,外層select將被標記為:derived
union result:從union表中獲取結果的select
哪些索引可以被使用
那些索引被實際使用
表之間的引用
每張表有多少行被優化器查詢
mysql高階索引 Mysql高階 索引優化全解
是否會使用索引,是mysql的關鍵 1.sql效能下降原因查詢語句寫的不好,連線子查詢太多,沒有建索引等等 索引失效 關聯jion表過多 伺服器引數設定不合適2.索引優化 索引是什麼?索引就是一種排好序的查詢資料結構,常見模型有雜湊表 有序陣列 二叉搜尋樹 目前最常用的innodb引擎使用的模型是b...
mysql高階 索引
mysql官方對索引的定義 索引 index 是幫助mysql高效獲取資料的資料結構 有序 在資料之外,資料庫系統還維護著某種特定查詢演算法的資料結構,這些資料結構以某種方式引用 指向 資料,這樣就可以在這些資料結構上實現高階查詢演算法,這種資料結構就是索引。一般來說索引本身也很大,不可能全部儲存在...
mysql高階 索引
四 關於索引的sql 優點 可以快速的檢索 可以加快分組和排序 缺點 占用儲存空間 降低資料表的修改操作主鍵索引 即主索引,根據主鍵 pk clolum length 建立索引,不允許重複,不允許空值 唯一索引 用來建立索引的列的值必須是唯一的,允許空值 普通索引 用表中的普通列構建的索引,沒有任何...