關於MySQL,你瞭解多少?_執行計畫,mysql瞭解執行計畫

來源:互聯網
上載者:User

關於MySQL,你瞭解多少?_執行計畫,mysql瞭解執行計畫
一.資料庫儲存引擎

查看mysql版本:


查看當前mysql版本支援的儲存引擎:


本文只介紹兩種常用儲存引擎:

1.   MyISAM

不支援交易處理

表鎖:發生死結機率高,相對並發也低

2.   InnoDB(MySQL 5.5之後預設儲存引擎)

支援交易處理

行鎖:發生死結機率低,相對並發也高

3.   行鎖與表鎖的界定

SQL樣本:update stu set c1 = ? where c2 = ?;

行鎖:其他線程無法操作當前檢索的資料,但是可以操作其他行資料

表鎖:其他線程無法操作當前表資料

4.   查看資料表格儲存體引擎,指定資料表格儲存體引擎4.1 建立資料表

create table stu(

         stuidint primary key auto_increment,

         stunamevarchar(255),

         stuageint,

         studescriptionvarchar(255)

);

4.2 查看該資料表使用的儲存引擎

使用視覺化檢視查看該表資訊:


我們可以在建立資料表的時候指定儲存引擎:

去查看該表的DDL語句,探索資料庫在執行SQL表建立語句的時候預設給我們加了一部分內容,結尾部分即指定ENGINE=InnoDB,如果我們要指定使用其他的資料庫儲存引擎,可以在建立表的時候修改該值即可,但是不建議修改為其他儲存引擎!!!

二.資料庫索引
  • PRIMARY KEY
  • UNIQUE
  • INDEX
  • FULLTEXT
三.執行計畫

對於慢SQL的最佳化,從哪兒著手?

通過查看執行計畫,可以確認該SQL在執行的時候有沒有使用索引

在stu表中插入一部分類比資料:

insertinto stu(stuname,stuage,studescription) values('張三',18,'愛好下棋');

insertinto stu(stuname,stuage,studescription) values('李四',22,'今天狀態不佳');

insertinto stu(stuname,stuage,studescription) values('王五',16,'生病');

insertinto stu(stuname,stuage,studescription) values('趙六',21,'喜歡三國演義');

insertinto stu(stuname,stuage,studescription) values('田七',17,'最近在研究機器學習');

分別查看下列SQL語句的執行計畫:

select stuid,stuname,stuage,studescription from stu;

select stuname,stuage,studescription from stu where stuid = 3;

select stuname,stuage,studescription from stu where stuname = '田七';

select stuname,stuage,studescription from stu where stuid > 2;





下面分別對id | select_type | table | partitions | type | possible_keys |key  | key_len | ref  | rows | filtered | Extra欄位進行講解:

1.   id
  • 數字越大越先執行
  • 如果數字一樣大,就從上往下執行
  • 如果為null就表示這是一個結果集,不需要使用它來進行查詢
2.   select_type
  • 每個SELECT子句的類型
  • 常見選項
3.   table
  • 顯示查詢的表名,如果查詢使用了別名,那麼這兒顯示的是別名
  • 如果不涉及對資料表的操作,顯示的是null
  • 如果顯示的是<derived N>,表示這是一張暫存資料表,N即是執行計畫中的id,表示這張表來源於這次查詢
  • 如果顯示的是<union M,N>,表示這是一張暫存資料表,表示這張表來源於union查詢id為M,N的結果集
4.   partitions5.   type
  • 效能從好到差:system、const、eq_ref、ref、fulltext、ref_or_null、unique_subquery、index_subquery、range、index_merge、index、ALL
  • 除了ALL以外,其他的type都可以使用到索引
  • 除了index_merge以外,其他的type只可以使用到一個索引
  • 不同連線類型的解釋
6.   possible_keys
  • 查詢可能使用到的索引
7.   key
  • 查詢實際使用到的索引,如果沒有,則為NULL
  • 如果select_type為index_merge,這裡可能出現兩個以上索引
8.   key_len
  • 只計算where條件用到的索引長度,而排序和分組就算使用到了索引,也不會計算到key_len中
9.   ref
  • 如果是常量等值查詢,這裡顯示const
  • 如果是串連查詢,被驅動表的執行計畫這裡會顯示驅動表的關聯欄位
  • 如果查詢條件中使用了運算式或者函數,或者條件列發生隱式轉換,這裡可能顯示為func
10.  rows
  • 執行計畫估算的掃描行數
11.  filtered
  • 滿足查詢條件的比例,單位是百分比
12.  Extra

該列包含MySQL解決查詢的詳細資料,有以下幾種情況:


著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.