mysql高階索引 Mysql高階 索引優化全解

2021-10-17 22:30:51 字數 2623 閱讀 1352

是否會使用索引,是mysql的關鍵

1.sql效能下降原因查詢語句寫的不好,連線子查詢太多,沒有建索引等等

索引失效

關聯jion表過多

伺服器引數設定不合適2.索引優化 索引是什麼?

索引就是一種排好序的查詢資料結構,常見模型有雜湊表、有序陣列、二叉搜尋樹

目前最常用的innodb引擎使用的模型是b+tree,也就是多叉搜尋樹(葉子節點是指標,指向資料位址)

如何建索引(也可以用alter)

假如表結構 id name email phonenumber

select * from user where name =『』;

單值索引:create index idx_user_name on user(name)

select * from user where name =『』 and email;

復合索引:create index idx_user_nameemail on user(name,email)

唯一索引:列值唯一,可以為空

索引好處壞處

好處就是減少io和cpu消耗

壞處就是占用空間、更新消耗增加、優化索引耗時

3.什麼時候建索引

什麼時候建

主鍵自動建索引,外來鍵要建

where經常用到的要建,where用不到的不建

排序、統計、分組的字段建立索引(order,group by等)

什麼時候不建

頻繁修改的列值

表記錄太少

列值重複過多4.explain 效能分析

架構

聯結器:通過聯結器連線資料庫

查詢快取:mysql拿到乙個查詢請求後,會先到查詢快取看看,之前是不是執行過這條語句,執行過的直接快取在記憶體中;如果查詢命中快取,mysql不需要執行後面的複雜操作,就可以直接返回結果。

優化器: 跟指令重排類似,會選擇最優方案

執行器:呼叫引擎

儲存引擎:預設innodb,還有myisam、memory等

是什麼模擬優化器執行sql語句,從而分析sql

怎麼做explain+sql

結果如下

4.1 引數詳解

id:選擇識別符號,可以理解為一組,如果是子查詢,id的序號會遞增,id值越大優先順序越高,越先被執行

select_type:表示查詢的型別。比如******-簡單select,不使用union或子查詢等

table:輸出結果集的表

type:對錶訪問方式,表示mysql在表中找到所需行的方式,又稱「訪問型別」。,常用的型別有: all、index、range、 ref、eq_ref、const、system、null(從左到右,效能從差到好)

possible_keys:表示查詢時,可能使用的索引

key:表示實際使用的索引

key_len:索引欄位的長度,表示索引中使用的位元組數

ref:列與索引的比較,即哪些列或常量被用於查詢索引列上的值

rows:掃瞄出的行數(估算的行數) 估算出結果集行數

extra:執**況的描述和說明

using where:不用讀取表中所有資訊,僅通過索引就可以獲取所需資料,這發生在對錶的全部的請求列都是同乙個索引的部分的時候,表示mysql伺服器將在儲存引擎檢索行後再進行過濾

using temporary:表示mysql需要使用臨時表來儲存結果集,常見於排序和分組查詢,常見 group by ; order by

using filesort:當query中包含 order by 操作,而且無法利用索引完成的排序操作稱為「檔案排序」

using join buffer 使用了連線快取

using filesort 使用乙個外部的索引排序

using index 使用了覆蓋索引

單錶和多表索引優化

單錶

兩表

左連線的索引加到join後面的表中效果更好,也就是加到右表,因為左連線條件用於如何從右表搜尋行,左表都有

5.索引失效的情況

導圖

最佳左字首法則:如果是復合索引,要遵守查詢從索引的最左前列開始並且不跳過索引中的列

不在索引列做任何操作,如計算、函式、型別轉換:比如left(索引)等函式

儲存引擎不能使用索引中範圍條件右邊的列:從範圍條件開始索引開始失效,比如id>『10』

盡量使用覆蓋索引,減少select *,select後面的搜尋目標要準確

mysql在使用不等於的時候無法使用索引:比如 is_null!=0

is null is not null 無法使用索引: 比如 where id is null

like 萬用字元在前,like使用萬用字元最好是索引在前,&索引 索引會失效

字串不加單引號索引失效:會發生型別轉換

or連線導致索引失效 :盡量少使用or

mysql高階 索引

mysql官方對索引的定義 索引 index 是幫助mysql高效獲取資料的資料結構 有序 在資料之外,資料庫系統還維護著某種特定查詢演算法的資料結構,這些資料結構以某種方式引用 指向 資料,這樣就可以在這些資料結構上實現高階查詢演算法,這種資料結構就是索引。一般來說索引本身也很大,不可能全部儲存在...

mysql 高階 索引

綠色代表值,黃色代表指標,藍色為磁碟塊,灰色表示沒有對應區域的資料。磁碟塊1中,p1指向數值小於17的磁碟塊,p2指向數值大於17小於35的磁碟塊,p3指向大於35的磁碟塊 尋找值為29 磁碟塊1中,29大於17小於35,由磁碟塊1的p2指向磁碟塊3 磁碟塊3中,29大於36小於30,由磁碟塊3的p...

mysql高階 索引

四 關於索引的sql 優點 可以快速的檢索 可以加快分組和排序 缺點 占用儲存空間 降低資料表的修改操作主鍵索引 即主索引,根據主鍵 pk clolum length 建立索引,不允許重複,不允許空值 唯一索引 用來建立索引的列的值必須是唯一的,允許空值 普通索引 用表中的普通列構建的索引,沒有任何...