国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術(shù)文章
文章詳情頁

MySQL explain獲取查詢指令信息原理及實(shí)例

瀏覽:3日期:2023-10-15 08:41:49

explain用于獲取查詢執(zhí)行計(jì)劃信息,

一、語法

只需要在select前加上explain即可,如:

mysql> explain select 1;+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+----------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+----------------+| 1 | SIMPLE | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | No tables used |+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+----------------+

二、explain中的信息

1、id:表示SELECT所屬的行。id越大,則執(zhí)行順序越高,id相同時(shí),從上到下執(zhí)行。

2、select_type:顯示對(duì)應(yīng)行是簡(jiǎn)單還是復(fù)雜查詢

1)SIMPLE:簡(jiǎn)單查詢,意味著不包含子查詢和UNION

2)SUBQUERY:表示是個(gè)子查詢

3)DERIVED:用來表示包含在FORM子句的子查詢中的SELECT

4)UNION:

3、table:表示訪問哪個(gè)表

4、partitions:訪問分區(qū)

5、type:關(guān)聯(lián)類型,就是如何查找表中的行。

1)ALL:全表掃描。為了查找數(shù)據(jù)必須從頭帶尾的掃描所有的數(shù)據(jù)(limit關(guān)鍵字不會(huì)掃描所有數(shù)據(jù))

2)index:索引掃描。這個(gè)跟全表掃描一樣,只是掃描表時(shí)按索引次序而不是行,主要優(yōu)點(diǎn)是避免了排序,最大缺點(diǎn)是承擔(dān)按索引次序讀取整個(gè)表的開銷。

3)range:范圍掃描。就是一個(gè)有限制的索引掃描,它開始于索引的某一點(diǎn),不用遍歷全部索引。

4)ref:索引訪問。它返回所有匹配某個(gè)單值的行。只有使用非唯一性所有或者唯一性所有的非唯一性前綴時(shí)才會(huì)發(fā)生。

5)eq_ref:使用這個(gè)索引查找,最多返回一條記錄,如果主鍵索引和唯一性索引。

6)const,system:當(dāng)MySQL能對(duì)查詢的某一部分進(jìn)行優(yōu)化并將其轉(zhuǎn)換成一個(gè)常量時(shí),就會(huì)使用這些訪問類型

6、possible_keys:顯示查詢可以用哪些所有

7、key:MySQL決定采用哪個(gè)索引來優(yōu)化這個(gè)該表的訪問,如果這個(gè)索引沒有出現(xiàn)在possible_keys中,它可能選擇了一個(gè)覆蓋索引,如果沒有使用索引,這個(gè)值為NULL

8 、key_len:索引的字節(jié)數(shù),越短越好。一般來說key_len等于索引列字段類型長度,如int是4字節(jié),bigint是8字節(jié),date是3個(gè)字節(jié),datetime是8個(gè)字節(jié);如果索引列是字符串類型,則需要考慮他的字符集,utf8每個(gè)字符占3個(gè)字段,可變類型(varchar)額外需要2個(gè)字節(jié);如果索引列可為空,則額外需要1個(gè)字段。

9、ref:

10、rows:MySQL估計(jì)為了找到所需的行而要讀取的行

11、filtered:返回結(jié)果的行數(shù)占讀取行數(shù)的百分比(估算),值越大越好

12、Extra:顯示不適合其他列但也重要的信息,常見得值有:

1)Using index:表示使用覆蓋索引,以避免訪問表

2)Using where:MySQL服務(wù)器將在存儲(chǔ)引擎檢索行后再進(jìn)行過濾

3)Using temporary:表示MySQL對(duì)查詢結(jié)果排序時(shí)會(huì)使用一個(gè)臨時(shí)表。

三、示例

示例1:

mysql> explain select * from bd_dept;+----+-------------+---------+------------+------+---------------+------+---------+------+------+----------+-------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+-------------+---------+------------+------+---------------+------+---------+------+------+----------+-------+| 1 | SIMPLE | bd_dept | NULL | ALL | NULL | NULL | NULL | NULL | 3 | 100.00 | NULL |+----+-------------+---------+------------+------+---------------+------+---------+------+------+----------+-------+

可以看出該語句進(jìn)行了全表掃描,沒有用到索引

示例2:

mysql> explain select * from bd_dept where id=1;+----+-------------+---------+------------+-------+---------------+---------+---------+-------+------+----------+-------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+-------------+---------+------------+-------+---------------+---------+---------+-------+------+----------+-------+| 1 | SIMPLE | bd_dept | NULL | const | PRIMARY | PRIMARY | 4 | const | 1 | 100.00 | NULL |+----+-------------+---------+------------+-------+---------------+---------+---------+-------+------+----------+-------+

該語句用到了主鍵索引,只需掃描一條記錄就可以得到結(jié)果,int類型占4個(gè)字節(jié),所以ken_len=4。

示例3:

mysql> explain select * from bd_dept where dept_code=’01’;+----+-------------+---------+------------+-------+---------------+-----------+---------+-------+------+----------+-------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+-------------+---------+------------+-------+---------------+-----------+---------+-------+------+----------+-------+| 1 | SIMPLE | bd_dept | NULL | const | dept_code | dept_code | 32 | const | 1 | 100.00 | NULL |+----+-------------+---------+------------+-------+---------------+-----------+---------+-------+------+----------+-------+

dept_code是一個(gè)唯一性索引字段,字段類型為varchar(10),不為空,所以索引長度為10*3+2=33。

示例4:

mysql> explain select * from bd_dept where create_date>’2020-04-29’;+----+-------------+---------+------------+-------+---------------+-------------+---------+------+------+----------+-----------------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+-------------+---------+------------+-------+---------------+-------------+---------+------+------+----------+-----------------------+| 1 | SIMPLE | bd_dept | NULL | range | create_date | create_date | 4 | NULL | 1 | 100.00 | Using index condition |+----+-------------+---------+------------+-------+---------------+-------------+---------+------+------+----------+-----------------------+

create_date是date類型,普通索引字段,可為空,查詢條件為大于,所以關(guān)聯(lián)類型為range,索引長度為3+1=4。

示例5:

mysql> explain select a.id, a.dept_name, b.dept_name parent_name from bd_dept a inner join bd_dept b on a.id=b.parent_id;+----+-------------+-------+------------+--------+---------------+---------+---------+----------------------+------+----------+-------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+-------------+-------+------------+--------+---------------+---------+---------+----------------------+------+----------+-------------+| 1 | SIMPLE | b | NULL | ALL | NULL | NULL | NULL | NULL | 3 | 100.00 | Using where || 1 | SIMPLE | a | NULL | eq_ref | PRIMARY | PRIMARY | 4 | zhi_test.b.parent_id | 1 | 100.00 | NULL |+----+-------------+-------+------------+--------+---------------+---------+---------+----------------------+------+----------+-------------+

可以看出MySQL先執(zhí)行一個(gè)全表掃描,再通過主鍵進(jìn)行關(guān)聯(lián)

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: MySQL 數(shù)據(jù)庫
相關(guān)文章:
主站蜘蛛池模板: 亚洲性爰视频 | 亚洲性xo | 中文字幕在线观看国产 | 精品视频在线观看一区二区三区 | 日本三级香港三级三级人 | 免费一级欧美片在线观免看 | 一本久久a久久精品亚洲 | 碰碰碰免费公开在线视频 | 久久性妇女精品免费 | 国产一级毛片视频 | 粉嫩高中生的第一次在线观看 | 日韩在线 | 中文 | 经典三级久久 | 中文字幕成人免费高清在线 | 欧美视频在线网站 | 日韩高清成人毛片不卡 | 精品国产爱久久 | 亚洲精品456在线播放无广告 | 日韩欧美久久一区二区 | 亚洲精品久久久久中文字幕一区 | 日本天堂网址 | 国产专区第一页 | 全部精品孕妇色视频在线 | 亚洲欧美日产综合在线看 | 欧美88| 91色久| 久久久久久久免费 | 免费大片黄手机在线观看 | 天天视频一区二区三区 | 亚洲欧美日韩国产一区二区精品 | 日韩99在线 | 精品久久久久久中文字幕一区 | 国产亚洲一区二区三区在线观看 | 国产成人精品午夜二三区 | 男人干女人逼 | 欧美日韩一区二区三区在线视频 | 欧美亚洲网站 | 中文字幕人成不卡一区 | 91精品国产91久久久久久 | 国产自在自线午夜精品 | 国产精品毛片久久久久久久 |