mysql執行計劃

    我剛開始看執行計劃的時候,還覺得是mysql計劃如何去執行對數據庫的增刪改查,相似於觸發器之類的東西,但通過學習才發現執行計劃真的是跟觸發器一毛錢關係都沒有。mysql

什麼時執行計劃    

    什麼是執行計劃呢?我我的理解,執行計劃是告訴數據庫操做人員這條sql語句將要如何去查詢。說白了,若是說sql語句是具體的執行行動,那麼執行計劃就是行動的預算,好比說執行的時候會不會用到索引,會不會用到分區等。sql

    咱們先建立一張表:    數據庫

CREATE TABLE `student` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  `sex` bit(1) DEFAULT b'0',
  PRIMARY KEY (`id`)
)

    咱們執行一條語句:   學習

select * from student where name="abc";

    如何查看執行計劃呢,很簡單,在執行的sql語句以前加上「desc」或「explain」便可。咱們具體查看下:spa

desc select * from student where name="abc" \G;
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: student
   partitions: NULL
         type: ALL
possible_keys: NULL
          key: NULL
      key_len: NULL
          ref: NULL
         rows: 7
     filtered: 14.29
        Extra: Using where

    各個字段的含義:code

  1. id:查詢序列號,select的識別符
  2. select_type:表示這條查詢語句的類型,由於這條查詢語句只涉及到了一個表:student,它在執行查詢的過程既沒有跟別的表一塊兒進行聯合查詢,也沒有進行子查詢因此它的類型最後肯定成SIMPLE
  3. table:查詢的表,就是在查詢過程當中要涉及到的表,本表只有student所以沒什麼好說的。
  4. partitions:分區,就是說這個表若是進行了分區存儲的話,這個個查詢最後會落到哪一個分區之中。由於student表並無進行任何的分區處理,因此返回null
  5. type:表示在進行查詢的時候查詢的類型,怎麼理解呢?我認爲查詢的類型是根據查詢的範圍分的,若是須要進行全表掃描,那麼type就是ALL,而若是對錶進行了分區,那麼確定就就是range了。
  6. possible_keys:表示執行sql語句所查詢到的行若是使用其它的select語句進行查詢,可能使用到的索引值。
  7. key:在查詢過程當中實際使用到的索引。
  8. key_len:表示mysql選擇的索引字段按字節計算的長度。
  9. ref:表示使用哪一個列與索引一塊兒作查詢記錄。
  10. row:表示在表中進行查詢的時候必須(注意是必須)檢查的行數。
  11. filtered:經過查詢條件過濾的查詢記錄數在整張表中記錄數的比例。
  12. Extra:在查詢過程當中的詳細信息。

    最後,若是在name字段上加上索引,會形成執行計劃的變化,咱們也能夠經過兩個執行計劃的不一樣來加深對以上的字段的理解:索引

alter table student add index idx_name (name);
desc select * from student where name = "abc" \G;
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: student
   partitions: NULL
         type: ref
possible_keys: idx_name
          key: idx_name
      key_len: 23
          ref: const
         rows: 1
     filtered: 100.00
        Extra: NULL

    由此也能夠看出索引在查詢過程當中所起的做用和所佔的份量it

相關文章
相關標籤/搜索