索引類似大學圖書館建書目索引,可以提高資料檢索的效率,降低資料庫的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...