首頁 > 資料庫 > mysql教程 > MySQL高級十三-透過索引優化SQL

MySQL高級十三-透過索引優化SQL

黄舟
發布: 2016-12-29 16:55:55
原創
1300 人瀏覽過

一、概述

二元樹——>索引檔:效率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 :輸出結果集的表子查詢中的第一個select .

table :輸出結果集的表子查詢

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

常見的類型有以下幾種;

all

index

range

ref

eq_ref

const,2到是最好有到最差嗎?

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

 以上就是MySQL高級十三-透過索引優化SQL的內容,更多相關內容請關注PHP中文網(m.sbmmt.com)!


相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板