第五章 索引與演算法
常用的型別有: all、index、range、 ref、eq_ref、const、system、null(從左到右,效能從差到好)
all:full table scan, mysql將遍歷全表以找到匹配的行
index: full index scan,index與all區別為index型別只遍歷索引樹
range:只檢索給定範圍的行,使用乙個索引來選擇行
ref: 表示上述表的連線匹配條件,即哪些列或常量被用於查詢索引列上的值
eq_ref: 類似ref,區別就在使用的索引是唯一索引,對於每個索引鍵值,表中只有一條記錄匹配,簡單來說,就是多表連線中使用primary key或者 unique key作為關聯條件
const、system: 當mysql對查詢某部分進行優化,並轉換為乙個常量時,使用這些型別訪問。如將主鍵置於where列表中,mysql就能將該查詢轉換為乙個常量,system是const型別的特例,當查詢的表只有一行的情況下,使用system
null: mysql在優化過程中分解語句,執行時甚至不用訪問表或索引,例如從乙個索引列裡選取最小值可以通過單獨索引查詢完成。
index condition pushdown (icp)是mysql使用索引從表中檢索行資料的一種優化方式,從mysql5.6開始支援,mysql5.6之前,儲存引擎會通過遍歷索引定位基表中的行,然後返回給server層,再去為這些資料行進行where後的條件的過濾。mysql 5.6之後支援icp後,如果where條件可以使用索引,mysql 會把這部分過濾操作放到儲存引擎層,儲存引擎通過索引過濾,把滿足的行從表中讀取出。icp能減少引擎層訪問基表的次數和 server層訪問儲存引擎的次數
作用:根據索引查詢的優化方式
當進行索引查詢時,首先根據索引來查詢,然後再根據where 條件過濾,將where 的部分過濾條件放在儲存引擎層
支援range ref eq_ref ref_or_null 型別的查詢
1.icp的目標是減少從基表中讀取操作的數量,從而降低io操作
2.對於innodb表,icp只適用於輔助索引(聯合索引 且 where 後邊的語句列屬性都在聯合索引裡面)
3.當使用icp優化時,執行計畫的extra列顯示using indexcondition提示
4.資料庫配置 optimizer_switch="index_condition_pushdown=on」;
當優化器使用icp時,會在extra 中顯示using index condition
當優化器使用mrr時,會在extra 中顯示using mrr
當使用 icp and mrr 時,using index condition,using mrr
MySQL技術內幕InnoDB儲存引擎
第5章 索引與演算法 p174 217 5.1 innodb儲存引擎索引概述 5.2 二分查詢法 5.3 平衡二叉樹 5.4 b 樹 5.4.1b 樹的插入操作 5.4.2b 樹的刪除操作 了解了一下例子 5.5b 樹索引 p181 195 5.5.1聚集索引 按主鍵建立b 樹索引 5.5.2非聚集...
MySQL技術內幕 InnoDB儲存引擎 筆記
mysql 體系結構和儲存引擎 資料庫 物理作業系統檔案或其他形式檔案內容的集合 資料庫例項 有資料庫後台程序 執行緒記憶乙個共享記憶體區組成 mysql資料庫在沒有配置檔案的情況下,會按照編譯時的預設引數設定啟動例項 mysql 按照 etc my.cnf etc mysql my.cnf usr...
MySQL技術內幕 InnoDB儲存引擎 一
第一章 mysql體系結構和儲存引擎 1定義資料庫和例項 資料庫 database 和 例項 instance 是兩個容易被混淆的概念。其中,資料庫是指 物理作業系統檔案或其他形式檔案型別的集合 例項是指 mysql資料庫由後台執行緒以及乙個共享記憶體區組成。資料庫例項才是真正用於運算元據庫檔案的。...