最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL關(guān)鍵字explain的用法詳解

 更新時間:2023年07月24日 09:35:02   作者:我有一顆五葉草  
MySQL 的 EXPLAIN 是一個用于查詢優(yōu)化的關(guān)鍵字。它用于分析和評估查詢語句的執(zhí)行計劃,幫助開發(fā)者理解查詢語句的性能問題以及優(yōu)化查詢的方式,所以本文就給大家詳細的介紹一下MySQL關(guān)鍵字explain的用法,需要的朋友可以參考下

使用EXPLAIN關(guān)鍵字,可以獲取關(guān)于查詢執(zhí)行計劃的詳細信息,包括表的訪問順序、連接方式、索引使用情況等,這些信息能夠幫助你確定查詢是否有效利用了索引,以及是否存在潛在的性能瓶頸。

要使用EXPLAIN關(guān)鍵字,只需在查詢語句前加上"EXPLAIN"關(guān)鍵字即可,例如:

EXPLAIN SELECT * FROM table_name WHERE column_name = 'value';

執(zhí)行以上語句后,MySQL會返回一個結(jié)果集,包含了查詢執(zhí)行計劃的詳細信息。該結(jié)果集中的每一行對應(yīng)查詢執(zhí)行計劃中的一步操作,你可以通過分析這些數(shù)據(jù)來確定查詢的性能瓶頸以及優(yōu)化的方向。

這些信息包括以下列:

id: 查詢執(zhí)行計劃中每個操作的唯一標識,
select_type: 操作類型,如簡單查詢、聯(lián)合查詢等,
table: 操作涉及的表名,
type: 表訪問的方式,如全表掃描、索引掃描等,
possible_keys: 可能使用的索引,
key: 實際使用的索引,
key_len: 實際使用的索引長度,
ref: 與索引比較的列或常量值,
rows: 預(yù)估的結(jié)果集行數(shù),
Extra: 額外的信息,如排序、臨時表等。
通過分析這些信息,你可以更好地理解查詢的執(zhí)行過程,并且采取相應(yīng)的優(yōu)化措施,例如創(chuàng)建合適的索引、優(yōu)化查詢語句等,以提高MySQL查詢的性能。

0 環(huán)境準備

CREATE TABLE `t_role` (
`id` varchar(32) NOT NULL,
`role_name` varchar(255) DEFAULT NULL,
`role_code` varchar(255) DEFAULT NULL,
`description` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `unique_role_name` (`role_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `t_user` (
`id` varchar(32) NOT NULL,
`username` varchar(45) NOT NULL,
`password` varchar(96) NOT NULL,
`name` varchar(45) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `unique_user_username` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `user_role` (
`id` int(11) NOT NULL auto_increment ,
`user_id` varchar(32) DEFAULT NULL,
`role_id` varchar(32) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `fk_ur_user_id` (`user_id`),
KEY `fk_ur_role_id` (`role_id`),
CONSTRAINT `fk_ur_role_id` FOREIGN KEY (`role_id`) REFERENCES `t_role` (`id`) ON
DELETE NO ACTION ON UPDATE NO ACTION,
CONSTRAINT `fk_ur_user_id` FOREIGN KEY (`user_id`) REFERENCES `t_user` (`id`) ON
DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into `t_user` (`id`, `username`, `password`, `name`)
values('1','super','$2a$10$TJ4TmCdK.X4wv/tCqHW14.w70U3CC33CeVncD3SLmyMXMknstqKRe','
超級管理員');
insert into `t_user` (`id`, `username`, `password`, `name`)
values('2','admin','$2a$10$TJ4TmCdK.X4wv/tCqHW14.w70U3CC33CeVncD3SLmyMXMknstqKRe','
系統(tǒng)管理員');
insert into `t_user` (`id`, `username`, `password`, `name`)
values('3','itcast','$2a$10$8qmaHgUFUAmPR5pOuWhYWOr291WJYjHelUlYn07k5ELF8ZCrW0Cui',
'test02');
insert into `t_user` (`id`, `username`, `password`, `name`)
values('4','stu1','$2a$10$pLtt2KDAFpwTWLjNsmTEi.oU1yOZyIn9XkziK/y/spH5rftCpUMZa','學(xué)
生1');
insert into `t_user` (`id`, `username`, `password`, `name`)
values('5','stu2','$2a$10$nxPKkYSez7uz2YQYUnwhR.z57km3yqKn3Hr/p1FR6ZKgc18u.Tvqm','學(xué)
生2');
insert into `t_user` (`id`, `username`, `password`, `name`)
values('6','t1','$2a$10$TJ4TmCdK.X4wv/tCqHW14.w70U3CC33CeVncD3SLmyMXMknstqKRe','老師
1');
INSERT INTO `t_role` (`id`, `role_name`, `role_code`, `description`) VALUES('5','學(xué)
生','student','學(xué)生');
INSERT INTO `t_role` (`id`, `role_name`, `role_code`, `description`) VALUES('7','老
師','teacher','老師');
INSERT INTO `t_role` (`id`, `role_name`, `role_code`, `description`) VALUES('8','教
學(xué)管理員','teachmanager','教學(xué)管理員');
INSERT INTO `t_role` (`id`, `role_name`, `role_code`, `description`) VALUES('9','管
理員','admin','管理員');
INSERT INTO `t_role` (`id`, `role_name`, `role_code`, `description`) VALUES('10','超
級管理員','super','超級管理員');
INSERT INTO user_role(id,user_id,role_id) VALUES(NULL, '1', '5'),(NULL, '1', '7'),
(NULL, '2', '8'),(NULL, '3', '9'),(NULL, '4', '8'),(NULL, '5', '10') ;

1 explain 之 id

id 字段是 select查詢的序列號,是一組數(shù)字,表示的是查詢中執(zhí)行select子句或者是操作表的順序。id 情況有三種:

1) id 相同表示加載表的順序是從上到下。

explain select * from t_role r, t_user u, user_role ur where r.id = ur.role_id and
u.id = ur.user_id ;

2) id 不同id值越大,優(yōu)先級越高,越先被執(zhí)行。

EXPLAIN SELECT * FROM t_role WHERE id = (SELECT role_id FROM user_role WHERE user_id
= (SELECT id FROM t_user WHERE username = 'stu1'))

3) id 有相同,也有不同,同時存在。id相同的可以認為是一組,從上往下順序執(zhí)行;在所有的組中,id的值越大,優(yōu)先級越高,越先執(zhí)行。

2 explain 之 select_type

表示 SELECT 的類型,常見的取值,如下表所示:

select_type含義
SIMPLE簡單的select查詢,查詢中不包含子查詢或者UNION
PRIMARY查詢中若包含任何復(fù)雜的子查詢,最外層查詢標記為該標識
SUBQUERY在SELECT 或 WHERE 列表中包含了子查詢
DERIVED在FROM 列表中包含的子查詢,被標記為 DERIVED(衍生) MYSQL會遞歸執(zhí)行這些子查詢,把結(jié)果放在臨時表中
UNION若第二個SELECT出現(xiàn)在UNION之后,則標記為UNION ; 若UNION包含在FROM子句的子查詢中,外層SELECT將被標記為 : DERIVED
UNION RESULT從UNION表獲取結(jié)果的SELECT

3 explain 之 table

展示這一行的數(shù)據(jù)是關(guān)于哪一張表的

4 explain 之 type

type 顯示的是訪問類型,是較為重要的一個指標,可取值為:

select_type含義
NULLMySQL不訪問任何表,索引,直接返回結(jié)果
system表只有一行記錄(等于系統(tǒng)表),這是const類型的特例,一般不會出現(xiàn)
const表示通過索引一次就找到了,const 用于比較primary key 或者 unique 索引。因為只匹配一行數(shù)據(jù),所以很快。如將主鍵置于where列表中,MySQL 就能將該查詢轉(zhuǎn)換為一個常亮。const于將"主鍵" 或 “唯一” 索引的所有部分與常量值進行比較
eq_ref類似ref,區(qū)別在于使用的是唯一索引,使用主鍵的關(guān)聯(lián)查詢,關(guān)聯(lián)查詢出的記錄只有一條。常見于主鍵或唯一索引掃描
ref非唯一性索引掃描,返回匹配某個單獨值的所有行。本質(zhì)上也是一種索引訪問,返回所有匹配某個單獨值的所有行(多個)
range只檢索給定返回的行,使用一個索引來選擇行。 where 之后出現(xiàn) between , < , > , in 等操作。
indexindex 與 ALL的區(qū)別為 index 類型只是遍歷了索引樹, 通常比ALL 快, ALL 是遍歷數(shù)據(jù)文件。
all將遍歷全表以找到匹配的行

結(jié)果值從最好到最壞以此是:null > system > const > eq_ref > ref > range > index > ALL

一般來說, 我們需要保證查詢至少達到 range 級別, 最好達到ref 。

5 explain 之 key

possible_keys : 顯示可能應(yīng)用在這張表的索引, 一個或多個。

key : 實際使用的索引, 如果為NULL, 則沒有使用索引。

key_len : 表示索引中使用的字節(jié)數(shù), 該值為索引字段最大可能長度,并非實際使用長度,在不損失精確性的前提下, 長度越短越好 。

6 explain 之 rows

掃描行的數(shù)量。

7 explain 之 extra

其他的額外的執(zhí)行計劃信息,在該列展示 。

到此這篇關(guān)于MySQL關(guān)鍵字explain用法詳解的文章就介紹到這了,更多相關(guān)MySQL關(guān)鍵字explain內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySQL order by與group by查詢優(yōu)化實現(xiàn)詳解

    MySQL order by與group by查詢優(yōu)化實現(xiàn)詳解

    order by 子句盡量使用index方式排序(即using index),避免使用filesort方式排序(即using filesort)。Index方式效率高,它指MySQL掃描索引本身完成排序,filesort則效率低
    2022-11-11
  • mysql 5.7.16 winx64安裝配置方法圖文教程

    mysql 5.7.16 winx64安裝配置方法圖文教程

    這篇文章主要為大家分享了mysql 5.7.16winx64安裝配置方法圖文教程,感興趣的朋友可以參考一下
    2016-11-11
  • 詳解MySQL中EXPLAIN解釋命令及用法講解

    詳解MySQL中EXPLAIN解釋命令及用法講解

    explain顯示了mysql如何使用索引來處理select語句以及連接表。可以幫助選擇更好的索引和寫出更優(yōu)化的查詢語句
    2017-11-11
  • Mysql查看最大連接數(shù)和修改最大連接數(shù)的講解

    Mysql查看最大連接數(shù)和修改最大連接數(shù)的講解

    今天小編就為大家分享一篇關(guān)于Mysql查看最大連接數(shù)和修改最大連接數(shù)的講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • 一文帶你分清MySQL回表查詢與索引覆蓋

    一文帶你分清MySQL回表查詢與索引覆蓋

    這篇文章主要給大家詳細介紹如何分清MySQL回表查詢與索引覆蓋,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • mysql大表復(fù)制的具體實現(xiàn)

    mysql大表復(fù)制的具體實現(xiàn)

    MySQL大表復(fù)制是指將一個數(shù)據(jù)庫中的大表復(fù)制到另一個數(shù)據(jù)庫中,以實現(xiàn)數(shù)據(jù)的備份或數(shù)據(jù)遷移的目的,具有一定的參考價值,感興趣的可以了解一下
    2023-10-10
  • MySQL條件查詢語句常用操作全面匯總

    MySQL條件查詢語句常用操作全面匯總

    當用戶查看表格的大量數(shù)據(jù)是,由于數(shù)據(jù)量過于巨大會導(dǎo)致很難獲取到需要的數(shù)據(jù),在這時,就需要一個方法,一個可以通過用戶輸入獲取到用戶需要的數(shù)據(jù)并回填入表格,這就是條件查詢的作用
    2022-04-04
  • MYSQL8.0.13免安裝版配置教程實例詳解

    MYSQL8.0.13免安裝版配置教程實例詳解

    這篇文章主要介紹了MYSQL8.0.13免安裝版 配置教程,本文是以8.0為例,通過實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2018-12-12
  • mysql 5.7.16 ZIP包安裝配置教程

    mysql 5.7.16 ZIP包安裝配置教程

    這篇文章主要為大家詳細介紹了mysql 5.7.16 ZIP包安裝配置教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • 大批量數(shù)據(jù)用mysql批量更新數(shù)據(jù)的4種方法總結(jié)

    大批量數(shù)據(jù)用mysql批量更新數(shù)據(jù)的4種方法總結(jié)

    這篇文章主要給大家介紹了關(guān)于大批量數(shù)據(jù)用mysql批量更新數(shù)據(jù)的4種方法,要在MySQL中新增大批量數(shù)據(jù),可以通過以下幾種方法來實現(xiàn),文中給出了詳細的代碼示例,需要的朋友可以參考下
    2024-05-05

最新評論

云林县| 会泽县| 施甸县| 太和县| 彭山县| 稻城县| 习水县| 台州市| 鄂伦春自治旗| 萨嘎县| 凤山市| 化隆| 余庆县| 永德县| 溧阳市| 通江县| 来凤县| 丰城市| 顺义区| 五寨县| 庄河市| 西盟| 南康市| 资溪县| 石泉县| 肥城市| 安吉县| 合川市| 沐川县| 延长县| 宁安市| 古丈县| 治多县| 望江县| 扬中市| 铜梁县| 廉江市| 慈溪市| 普安县| 蒙山县| 岳普湖县|