mysql 高階 索引

2021-10-10 10:30:46 字數 1417 閱讀 6591

綠色代表值,黃色代表指標,藍色為磁碟塊,灰色表示沒有對應區域的資料。

磁碟塊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 建立索引,不允許重複,不允許空值 唯一索引 用來建立索引的列的值必須是唯一的,允許空值 普通索引 用表中的普通列構建的索引,沒有任何...