MySQL高級十三——通過索引優化SQL

一、概述

二叉樹——>索引文件:效率log2N

檢索10次:2的10次方。1024條記錄。

索引帶來的開銷

查看數據的文件(安裝目錄下的data目錄),會發現三個文件,

.frm:表示表的結構

.myd:表示數據

.myi:表示索引的文件


索引帶來的問題:會導致insert,update,delete的效率


更新頻繁的字段不適合創建索引。

唯一性比較差的字段不適合創建索引。比如人的性別只有男和女


滿足一下條件纔會創建索引

1、肯定在where條件中經常使用到。

2、該字段的變化不會太頻繁。


二、索引使用場景

1、快速查找符合where條件的記錄。

2、快速確定候選集。若where條件使用了多個索引字段,則MySQL會優先使用能使候選集規模最小的那個索引,以便儘快淘汰不符合條件的記錄。

3、如果表中存在幾個字段構成的聯合索引,則查找記錄時,這個聯合索引的最左前綴匹配字段也會被自動作爲索引來加速查找。

例如:若爲某張表創建了3個索引,(c1,c2,c3)構成的聯合索引,則(c1),(c1,c2),(c1,c2,c3)均會作爲索引,(c2,c3)就不會被作爲索引,而(c1,c3)其實只利用到c1索引。

4、多表做join操作時會使用索引(如果參與join的字段在這些表中均建立了索引的話)

5、若某個字段已建立索引,求該字段做sort或group操作時,MySQL會使用索引。

三、通過EXPLAIN分析執行低效SQL的執行計劃

如:

mysql> explain select * from taxgrouptaxes\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: taxgrouptaxes
         type: ALL
possible_keys: NULL
          key: NULL
      key_len: NULL
          ref: NULL
         rows: 1
        Extra:

select_type :表示SELECT 的類型

常見的取值有

SIMPLE:簡單表,既不使用表連接或者子查詢的

PRIMARY :主查詢,既外層的查詢

union :UNION 中的第二個或者後面的查詢語句

SUBQUERY :子查詢中的第一個select .


table :輸出結果集的表 

type 表示MYSQL 在表中找到所需行的方式。或者叫訪問類型。

常見的類型有以下幾種;

all

index

range

ref

eq_ref

const,system 

null

從上到下呢,性能有最差到最好。

1:type=all 全表掃描。

2:type=index 索引掃面

3:type=tange 索引範圍掃描。常見於< <= > >= between 等操作 

4:type=ref  s使用費唯一索引掃描或唯一索引的前綴掃描。

5:type=eq_ref  類似ref 區別就在使用的索引是唯一索引,對於每個索引鍵值,表中只有一條記錄匹配。

6:type=const/system 單表中最多有一個匹配行,查詢起來非常迅速。

7 : type=null MYSQL 不用訪問表或者索引。直接就能夠得到結果。

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

key: 表示實際使用的索引

key_len: 使用到索引字段的長度

rows : 掃描行的數量 

Extra : 執行情況的說明和掃描。包含不適合的其他列中顯示單是對執行計劃非常重要 。

四、通過show profile分析SQL

1、首先查看MySQL是否支持show profile

mysql> select @@have_profiling;
+------------------+
| @@have_profiling |
+------------------+
| YES              |
+------------------+
1 row in set (0.00 sec)

2、如果profile是關閉的,可以通過set語句在session級別開啓profile

set profiling = 1;

3、執行完畢之後,可以通過show profiles語句,查看當前SQL的queryID。

4、通過show profile for query queryID



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章