MySQL執行計畫詳解 優化sql語句

2021-08-21 14:45:30 字數 2043 閱讀 5803

執行計畫,簡單的來說,是sql在資料庫中執行時的表現情況,通常用於sql效能分析,優化等場景。在mysql使用explain關鍵字來檢視sql的執行計畫。如下所示:

//1. 查詢t_base_user

select * from t_base_user where name="andyqian";

//2. 檢視上述語句的執行計畫

explain select * from t_base_user where name="andyqian";

執行檢視上述2語句後,我們可以得出以下執行計畫結果

idselect_type

table

type

possible_kes

keykey_len

refrows

extra

1******

t_base_user

all1

using where

上面執行計畫是什麼意思呢?有什麼參考價值呢?

上面這個執行計畫給到的資訊是: 這個結果通過乙個簡單的語句全表掃瞄,共掃瞄1行,使用where條件在t_base_user表中篩選出的。發現該語句並沒有走索引,為什麼是這樣的呢?別急,我們緊接著看下一節。

通過上面,我們知道了什麼是執行計畫,也看到了執行計畫到底是什麼東西,現在我們來具體了解一下,mysql執行計畫中,每個屬性代表的是什麼意思?

我們一一來介紹,並說明每個屬性有哪些可選值,以及每個可選值的意思。

看到這裡,我們應該已經發現,在第一步中,我們的這條sql

select * from t_base_user where name="andyqian";

是沒有走索引的,而且還是全表掃瞄,在資料量少的情況下,問題還不會特別突出,如果資料量比較大,這可是個會造成生產事故的慢查詢哦,現在我們改造一下,將name欄位新增上索引,

# 新增索引

alter table t_base_user add index idx_name(name);

看看它的執行計畫是怎樣的。

idselect_type

table

type

possible_kes

keykey_len

refrows

extra

1******

t_base_user

refidx_name

idx_name

93cons

1using where

你看,現在已經走idx_name索引了,其type從all(全表掃瞄)到ref(非唯一索引了),別看就只有這一點點小區別,在大資料量的時候,可是會起大作用的哦。

本文中演示的資料結構如下:

# 建立表  

create table t_base_user(

oid bigint(20) not null primary key auto_increment,

name varchar(30) null comment "name",

email varchar(30) null comment "email",

age int null comment "age",

telephone varchar(30) null comment "telephone",

status tinyint(4) null comment "0  無效 1 有效",

created_at datetime null comment "",

updated_at datetime null comment ""

## 新增記錄:

insert into t_base_user(name,email,age,telephone,created_at,updated_at)values("andyqian","[email protected]",20,"15608411",now(),now());

乙個好的資料庫表設計,從一開始就應該考慮新增索引,而不是到最後發現慢sql了,影響業務了,才來補救。其實我在工作經歷當中,由於新建表,或新加字段後,忘記新增索引也造成了多次生產事故,記憶猶新!!!

mysql 執行計畫詳解

1 id列數字越大越先執行,如果說數字一樣大,那麼就從上往下依次執行,id列為null的就表是這是乙個結果集,不需要使用它來進行查詢。2 select type列常見的有 a 表示不需要union操作或者不包含子查詢的簡單select查詢。有連線查詢時,外層的查詢為 且只有乙個 b primary ...

mysql執行計畫詳解

引言 實際專案開發中,由於我們不知道實際查詢的時候資料庫裡發生了什麼事情,資料庫軟體是怎樣掃瞄表 怎樣使用索引的,因此,我們能感知到的就只有 sql語句執行的時間,在資料規模不大時,查詢是瞬間的,因此,在寫sql語句的時候就很少考慮到效能的問題。但是當資料規模增大,如千萬 億的時候,我們運 行同樣的...

MySQL執行計畫詳解

在進行sql優化的時候我們常常使用explain來檢視執行計畫,這裡來詳細解釋一下執行計畫的字段意義 表示select語句的順序,id值大的先執行,id相同則從上到下執行 這一列顯示了 對應行是簡單還是複雜select,值意味著查詢不包括子查詢和union。查詢有任何複雜的子部分,則最外層標記為pr...