欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

如何看懂MySQL執(zhí)行計(jì)劃

本文主要給大家介紹如何看懂MySQL執(zhí)行計(jì)劃,文章內(nèi)容都是筆者用心摘選和編輯的,具有一定的針對性,對大家的參考意義還是比較大的,下面跟筆者一起了解下如何看懂MySQL執(zhí)行計(jì)劃吧。

創(chuàng)新互聯(lián)建站專注于渾南企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站建設(shè),商城網(wǎng)站制作。渾南網(wǎng)站建設(shè)公司,為渾南等地區(qū)提供建站服務(wù)。全流程按需網(wǎng)站制作,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)建站專業(yè)和態(tài)度為您提供的服務(wù)

執(zhí)行計(jì)劃是什么?

  執(zhí)行計(jì)劃,簡單的來說,是SQL在數(shù)據(jù)庫中執(zhí)行時(shí)的表現(xiàn)情況,通常用于SQL性能分析,優(yōu)化等場景。在MySQL使用 explain 關(guān)鍵字來查看SQL的執(zhí)行計(jì)劃。如下所示:

1.查詢t_base_user
select * from t_base_user where name="andyqian";

2.查看上述語句的執(zhí)行計(jì)劃
explain select * from t_base_user where name="andyqian";

執(zhí)行查看上述2語句后,我們可以得出以下執(zhí)行計(jì)劃結(jié)果

idselect_typetabletypepossible_keskeykey_lenrefrowsExtra
1SIMPLEt_base_userALL


1Using where

上面執(zhí)行計(jì)劃是什么意思呢?有什么參考價(jià)值呢?

上面這個(gè)執(zhí)行計(jì)劃給到的信息是: 這個(gè)結(jié)果通過一個(gè)簡單的語句全表掃描,共掃描1行,使用where條件在t_base_user表中篩選出的。發(fā)現(xiàn)該語句并沒有走索引,為什么是這樣的呢?別急,我們緊接著看下一節(jié)。

如何看懂MySQL執(zhí)行計(jì)劃

讀懂執(zhí)行計(jì)劃

  通過上面,我們知道了什么是執(zhí)行計(jì)劃,也看到了執(zhí)行計(jì)劃到底是什么東西,現(xiàn)在我們來具體了解一下,MySQL執(zhí)行計(jì)劃中,每個(gè)屬性代表的是什么意思?

idselect_typetabletypepossible_keskeykey_lenrefrowsExtra

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

  • id
    表示查詢中select操作表的順序,按順序從大到依次執(zhí)行

  • select_type :
    該表示選擇的類型,可選值有: SIMPLE(簡單的),

  • type :
    該屬性表示訪問類型,有很多種訪問類型。
    最常見的其中包括以下幾種: ALL(全表掃描), index(索引掃描),range(范圍掃描),ref (非唯一索引掃描),eq_ref(唯一索引掃描,),(const)常數(shù)引用, 訪問速度依次由慢到快。

    其中 : range(范圍)常見與 between and ..., 大于 and 小于這種情況。
    提示 : 慢SQL是否走索引,走了什么索引,也就可以通過該屬性查看了。

  • table :
    表示該語句查詢的表

  • possible_keys :
    顧名思義,該屬性給出了,該查詢語句,可能走的索引,(如某些字段上索引的名字)這里提供的只是參考,而不是實(shí)際走的索引,也就導(dǎo)致會(huì)有possible_Keys不為null,key為空的現(xiàn)象。

  • key : 顯示MySQL實(shí)際使用的索引,其中就包括主鍵索引(PRIMARY),或者自建索引的名字。

  • key_len : 表示索引所使用的字節(jié)數(shù),

  • ref :
    連接匹配條件,如果走主鍵索引的話,該值為: const, 全表掃描的話,為null值

  • rows :
    掃描行數(shù),也就是說,需要掃描多少行,采能獲取目標(biāo)行數(shù),一般情況下會(huì)大于返回行數(shù)。通常情況下,rows越小,效率越高, 也就有大部分SQL優(yōu)化,都是在減少這個(gè)值的大小。

    注意:  理想情況下掃描的行數(shù)與實(shí)際返回行數(shù)理論上是一致的,但這種情況及其少,如關(guān)聯(lián)查詢,掃描的行數(shù)就會(huì)比返回行數(shù)大大增加)

  • Extra 這個(gè)屬性非常重要,該屬性中包括執(zhí)行SQL時(shí)的真實(shí)情況信息,如上面所屬,使用到的是"using where",表示使用where篩選得到的值,常用的有: "Using temporary": 使用臨時(shí)表 "using filesort": 使用文件排序

看到這里,我們應(yīng)該已經(jīng)發(fā)現(xiàn),在第一步中,我們的這條SQL

select * from t_base_user where name="andyqian";

是沒有走索引的,而且還是全表掃描,在數(shù)據(jù)量少的情況下,問題還不會(huì)特別突出,如果數(shù)據(jù)量比較大,這可是個(gè)會(huì)造成生產(chǎn)事故的慢查詢哦,現(xiàn)在我們改造一下,將name字段添加上索引,

添加索引
alter table t_base_user add index idx_name(name);

看看它的執(zhí)行計(jì)劃是怎樣的。

idselect_typetabletypepossible_keskeykey_lenrefrowsExtra
1SIMPLEt_base_userrefidx_nameidx_name93cons1Using where

你看,現(xiàn)在已經(jīng)走idx_name索引了,其type從All(全表掃描)到ref(非唯一索引了),別看就只有這一點(diǎn)點(diǎn)小區(qū)別,在大數(shù)據(jù)量的時(shí)候,可是會(huì)起大作用的哦。

數(shù)據(jù)結(jié)

  本文中演示的數(shù)據(jù)結(jié)構(gòu)如下:

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","andytohome",20,"15608411",now(),now();)

看完以上關(guān)于如何看懂MySQL執(zhí)行計(jì)劃,很多讀者朋友肯定多少有一定的了解,如需獲取更多的行業(yè)知識信息 ,可以持續(xù)關(guān)注我們的行業(yè)資訊欄目的。

分享標(biāo)題:如何看懂MySQL執(zhí)行計(jì)劃
文章位置:http://chinadenli.net/article0/pgpgio.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊Google靜態(tài)網(wǎng)站定制網(wǎng)站企業(yè)建站品牌網(wǎng)站設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作