mysql 索引優化 Explain的使用

2021-10-10 14:41:14 字數 2027 閱讀 6018

索引類似大學圖書館建書目索引,可以提高資料檢索的效率,降低資料庫的io成本

mysql提供了explain,用於顯示sql執行的詳細資訊,可以進行索引的優化。

一、導致sql語句執行慢的原因

1.硬體問題。如: 網路速度,記憶體不足,i/o吞吐量小,磁碟空間滿了等。

2.沒有索引 或者 索引失效。(表中某些資料被硬刪除,會影響到索引,需要重建索引)

3.資料過多

4.伺服器引數小,(重新設定my.cnf 表引數)

注意:  索引失效的情況有---> 條件中有 or ,like查詢以 開頭。

強制索引 force index(idx_order_leveldate) 

explain select * from itdragon_order_list force index(idx_order_leveldate) order by order_level,input_date;

索引的建立

alter table `table_name` add index `index_name` (`column_list`) -- 索引名,可要可不要;如果不要,當前的索引名就是該欄位名。 

alter table `table_name` add unique (`column_list`)

alter table `table_name` add primary key (`column_list`)

alter table `table_name` add fulltext key (`column_list`)

二、分析原因,找到切入點

1. 先觀察, 開啟慢查詢日誌,設定相應的閾值,在生產環境跑一天,(超過3s就是慢sql)

2.explain和慢sql分析; 如: sql語句爛,索引沒有或失效。關聯查詢過多等等。

3.show profile 是比 explain更細節點

4.mysql 伺服器引數調優,

三、explain 分析

索引使用情況在  possible_keys、key和key_len三列 。

id值越大越先被執行

table查詢涉及的表或者衍生表

select_type :

system: 表中只有一條資料, 這個型別是特殊的 const 型別。

const: 針對主鍵或唯一索引查詢,只返回一條資料。速度非常快

eq_ref: 多表的 join 查詢,效率比較高,兩邊表的資料量一樣,一條對應一條。

ref: 多表的 join 查詢,針對於非唯一或非主鍵索引,

range: 表示使用索引範圍查詢

index: 表示全索引掃瞄

all: 表示全表掃瞄,這個型別的查詢是效能最差的查詢之一。

效能關係:  all < index < range ~ index_merge < ref < eq_ref < const < system

possible_keysmysql 在查詢時,可能使用到的索引

keymysql 在查詢時 , 真正使用到的索引

key_len查詢優化器使用了索引的位元組數

ref索引的哪個列被使用了

rows查詢結果需要掃瞄讀取的資料行數  (越小越好)

優化:explain  查詢後,檢視sql語句的type型別 , 索引是否使用。 

mysql 優化 聚集索引 mysql 索引優化

一.聚集索引 clustered index innodb預設依據主鍵列聚集,myisam不使用 特點 b樹每個葉子包含實際資料行,資料按照索引順序地儲存在物理頁上。優點 1.範圍查詢,獲取指定id的全部資料只需從磁碟讀取少量資料頁 如果不使用聚集索引,每條資料可能引起一次磁碟io。2.由於索引和資...

mysql索引優化原則 MySQL 索引優化原則

索引優化原則 1 最左字首匹配原則,聯合索引,mysql會從做向右匹配直到遇到範圍查詢 3 and d 4 如果建立 a,b,c,d 順序的索引,d是用不到索引的,如果建立 a,b,d,c 的索引則都可以用到,a,b,d的順序可以任意調整。2 和in可以亂序,比如a 1 and b 2 and c ...

mysql索引優化原則 MySQL索引優化

mysql官方對索引的定義 索引是幫助mysql高效獲取資料的資料結構。索引是在儲存引擎中實現的,所以每種儲存引擎中的索引都不一樣。如myisam和innodb儲存引擎只支援btree索引 memory和heap儲存引擎可以支援hash和btree索引。這裡僅針對常用的innodb儲存引擎所支援的b...