1. 程式人生 > >mysql高階(一)——索引和explain介紹

mysql高階(一)——索引和explain介紹

什麼是索引?
可以理解為排好序的快速查詢資料結構
優勢:
1.類似大學圖書館建書目索引,提高資料檢索的效率,降低資料庫的IO成本
2.通過索引對資料進行排序,降低資料排序的成本,降低了CPU的消耗
劣勢:
1.實際上索引也是一張表,儲存了主鍵和索引欄位,並指向實體表的記錄,所以索引也是要佔用空間的
2.雖然索引提高了查詢速度,但同時卻降低了更新表的速度,因為每次更新表,mysql不僅要更新資料。每次更新添加了索引列的欄位,都會調整因為更新帶來的鍵值變化後的索引資訊
3.索引只是提高效率的一個因素,如果mysql有大量的資料表,就需要研究建立最優索引,或優化查詢

索引的分類

  • 單值索引:一個索引只包含單個列,一個表可以有多個單列索引
  • 唯一索引:索引列的值必須唯一,但允許空值(CREATE UNIQUE INDEX indexName ON mytable(colName))
  • 複合索引:即一個索引包含多個列

基本語法

  • 建立:CREATE [UNIQUE] INDEX indexName ON mytable(colName)
    ALTER TABLE mytable ADD [UNIQUE] INDEX indexName(colName)
  • 刪除:DROP INDEX [indexName] ON mytable
  • 檢視:SHOW INDEX FROM table_name

索引結構

  1. BTree索引
  2. Hash索引
  3. full-text全文索引
  4. R-Tree索引

哪些情況需要建立索引

  1. 主鍵自動建立唯一索引
  2. 頻繁作為查詢條件的欄位應該建立索引
  3. 查詢中與其他表關聯的欄位,外來鍵關係建立索引
  4. 頻繁更新的欄位不適合建立索引
  5. Where條件裡用不到的欄位不建立索引
  6. 高併發下傾向於建立組合索引
  7. 查詢中排序的欄位,排序欄位若通過索引去訪問將大大提高排序速度
  8. 查詢中統計或者分組的欄位

SQL效能分析

EXPLAIN

使用EXPLAIN關鍵字可以模擬優化器執行SQL查詢語句,從而知道Mysql是如何處理你的SQL語句的。分析你的查詢語句或是表結構的效能瓶頸。

這裡寫圖片描述
下面我們就來分析表頭的這些欄位代表什麼。

  • id

    id相同:
    引用塊內容
    id不同:
    這裡寫圖片描述
    id相同又不同:
    這裡寫圖片描述

  • select_type

常見的有:SIMPLE、PRIMARY、SUBQUERY、DERIVED、UNION、UNION RESULT
這裡寫圖片描述

  • type

引用塊內容

  • possible_keys key

引用塊內容

  • key_len

引用塊內容

  • ref

顯示索引的哪一列被使用了,如果可能的話,是一個常數。哪些列或者常量被用於查詢索引列上的值。

  • rows

根據表統計資訊及索引選用的情況,大致估算出找到所需的記錄所需要讀取的行數

  • Extra

根包含不適合在其他列中顯示但十分重要的額外資訊
這裡寫圖片描述