自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

帶你一起了解MySQL執(zhí)行計(jì)劃

數(shù)據(jù)庫(kù) MySQL
在之前的面試過(guò)程中,問到執(zhí)行計(jì)劃,有很多童鞋不知道是什么?甚至將執(zhí)行計(jì)劃與執(zhí)行時(shí)間認(rèn)為是同一個(gè)概念。今天我們就一起來(lái)了解一下執(zhí)行計(jì)劃到底是什么?有什么用途?

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

前言

在之前的面試過(guò)程中,問到執(zhí)行計(jì)劃,有很多童鞋不知道是什么?甚至將執(zhí)行計(jì)劃與執(zhí)行時(shí)間認(rèn)為是同一個(gè)概念。今天我們就一起來(lái)了解一下執(zhí)行計(jì)劃到底是什么?有什么用途?

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

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

  1. //1. 查詢t_base_user 
  2. select * from t_base_user where name="andyqian"
  3.   
  4. //2. 查看上述語(yǔ)句的執(zhí)行計(jì)劃 
  5. explain select * from t_base_user where name="andyqian" 

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

 

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

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

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

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

 

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

  • id

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

  • select_type :

該表示選擇的類型,可選值有: SIMPLE(簡(jiǎn)單的),

  • type :

該屬性表示訪問類型,有很多種訪問類型。

最常見的其中包括以下幾種: ALL(全表掃描), index(索引掃描),range(范圍掃描),ref (非唯一索引掃描),eq_ref(唯一索引掃描,),(const)常數(shù)引用, 訪問速度依次由慢到快。其中 : range(范圍)常見與 between and …, 大于 and 小于這種情況。

提示 : 慢SQL是否走索引,走了什么索引,也就可以通過(guò)該屬性查看了。

  • table :

表示該語(yǔ)句查詢的表

  • possible_keys :

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

  • key :

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

  • key_len :

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

  • ref :

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

  • rows :

掃描行數(shù),也就是說(shuō),需要掃描多少行,采能獲取目標(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

  1. select * from t_base_user where name="andyqian"

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

  1. # 添加索引 
  2.  
  3. alter table t_base_user add index idx_name(name);  

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

 

你看,現(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)如下:

  1. # 創(chuàng)建表   
  2. create table t_base_user( 
  3. oid bigint(20) not null primary key auto_increment, 
  4. name varchar(30) null comment "name"
  5. email varchar(30) null comment "email"
  6. age int null comment "age"
  7. telephone varchar(30) null comment "telephone"
  8. status tinyint(4) null comment "0  無(wú)效 1 有效"
  9. created_at datetime null comment ""
  10. updated_at datetime null comment "" 
  11.   
  12. ## 新增記錄: 
  13. insert into t_base_user(name,email,age,telephone,created_at,updated_at)values("andyqian","andytohome@gmail.com",20,"15608411",now(),now()); 
  14. ) 

***

一個(gè)好的數(shù)據(jù)庫(kù)表設(shè)計(jì),從一開始就應(yīng)該考慮添加索引,而不是到***發(fā)現(xiàn)慢SQL了,影響業(yè)務(wù)了,才來(lái)補(bǔ)救。其實(shí)我在工作經(jīng)歷當(dāng)中,由于新建表,或新加字段后,忘記添加索引也造成了多次生產(chǎn)事故,記憶猶新!!!

其實(shí)新建索引也是有一定的原則的,建什么索引,建在哪些字段上,這里面還有不少知識(shí)呢,下一篇文章寫,盡請(qǐng)期待吧! 

責(zé)任編輯:龐桂玉 來(lái)源: 數(shù)據(jù)庫(kù)開發(fā)
相關(guān)推薦

2010-04-01 13:58:16

WinCE 6.0Cashmere

2021-05-28 10:46:36

MySQL執(zhí)行計(jì)劃

2024-05-28 00:00:03

Java垃圾收集機(jī)制

2021-07-27 18:03:59

iOSSwift調(diào)度器

2021-10-27 07:15:37

SpringAOP編程(

2022-05-07 07:43:07

Redis存儲(chǔ)系統(tǒng)數(shù)據(jù)庫(kù)

2021-11-29 07:24:08

ACID事務(wù)大數(shù)據(jù)

2021-07-14 08:00:12

Numa架構(gòu)Linux

2023-06-30 08:27:20

2009-11-13 16:28:02

Oracle生成執(zhí)行計(jì)

2022-07-20 08:55:10

編輯器VueTiptap

2020-07-23 07:51:51

Python編程語(yǔ)言工具

2023-09-21 10:55:51

MysqlSQL語(yǔ)句

2022-08-08 08:03:44

MySQL數(shù)據(jù)庫(kù)CBO

2024-09-12 15:16:14

2011-09-14 17:03:17

數(shù)據(jù)庫(kù)執(zhí)行計(jì)劃解析

2016-09-02 16:49:54

APPVR

2020-09-15 08:44:57

MySQL慢日志SQL

2021-04-24 12:01:08

MySQL數(shù)據(jù)庫(kù)Mysql執(zhí)行計(jì)劃

2023-11-29 12:09:07

AWS網(wǎng)絡(luò)服務(wù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)