欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2020年05月14日 15:29:37   作者:玄同太子  
這篇文章主要介紹了MySQL explain獲取查詢指令信息原理及實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

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

一、語(yǔ)法

只需要在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:用來(lái)表示包含在FORM子句的子查詢中的SELECT

4)UNION:

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

4、partitions:訪問(wèn)分區(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è)表的開(kāi)銷。

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

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

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

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

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

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

8 、key_len:索引的字節(jié)數(shù),越短越好。一般來(lái)說(shuō)key_len等于索引列字段類型長(zhǎng)度,如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:顯示不適合其他列但也重要的信息,常見(jiàn)得值有:

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

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

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 |
+----+-------------+---------+------------+------+---------------+------+---------+------+------+----------+-------+

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

示例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 |
+----+-------------+---------+------------+-------+---------------+---------+---------+-------+------+----------+-------+

該語(yǔ)句用到了主鍵索引,只需掃描一條記錄就可以得到結(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),不為空,所以索引長(zhǎng)度為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,索引長(zhǎng)度為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è)全表掃描,再通過(guò)主鍵進(jìn)行關(guān)聯(lián)

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

相關(guān)文章

  • MySQL中Decimal類型和Float Double的區(qū)別(詳解)

    MySQL中Decimal類型和Float Double的區(qū)別(詳解)

    下面小編就為大家?guī)?lái)一篇MySQL中Decimal類型和Float Double的區(qū)別(詳解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-03-03
  • MySQL約束constraint用法詳解

    MySQL約束constraint用法詳解

    大家都知道MySQL中經(jīng)常會(huì)需要?jiǎng)?chuàng)建父子表之間的約束,下面這篇文章主要給大家介紹了關(guān)于MySQL約束constraint用法的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05
  • MYSQL插入處理重復(fù)鍵值的幾種方法

    MYSQL插入處理重復(fù)鍵值的幾種方法

    當(dāng)unique列在一個(gè)UNIQUE鍵上插入包含重復(fù)值的記錄時(shí),默認(rèn)insert的時(shí)候會(huì)報(bào)1062錯(cuò)誤,MYSQL有三種不同的處理方法,下面我們分別介紹。
    2012-09-09
  • MySQL生成千萬(wàn)測(cè)試數(shù)據(jù)以及遇到的問(wèn)題

    MySQL生成千萬(wàn)測(cè)試數(shù)據(jù)以及遇到的問(wèn)題

    前兩天發(fā)現(xiàn)同事要做一個(gè)對(duì)大表進(jìn)行范圍查詢的功能,所以需要生成千萬(wàn)數(shù)據(jù)進(jìn)行性能測(cè)試,下面這篇文章主要給大家介紹了關(guān)于MySQL生成千萬(wàn)測(cè)試數(shù)據(jù)以及遇到的問(wèn)題的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08
  • mysql開(kāi)啟遠(yuǎn)程連接(mysql開(kāi)啟遠(yuǎn)程訪問(wèn))

    mysql開(kāi)啟遠(yuǎn)程連接(mysql開(kāi)啟遠(yuǎn)程訪問(wèn))

    開(kāi)啟MYSQL遠(yuǎn)程連接權(quán)限的方法,大家參考使用吧
    2013-12-12
  • xampp修改mysql默認(rèn)密碼的方法

    xampp修改mysql默認(rèn)密碼的方法

    在這里介紹xampp修改mysql默認(rèn)密碼的大概過(guò)程是先利用xampp的phpmyadmin進(jìn)入修改mysql密碼,修改之后我們?cè)傩薷膞ampp中phpmyadmin的密碼,這樣就完整的修改mysql默認(rèn)密碼了,感興趣的朋友一起通過(guò)本文學(xué)習(xí)吧
    2016-10-10
  • ERROR 1862 (HY000): Your password has expired. To log in you must change it using a .....

    ERROR 1862 (HY000): Your password has expired. To log in you

    當(dāng)你在安裝 MySQL過(guò)程中,通過(guò)mysqld --initialize 初始化 mysql 操作后,生成臨時(shí)密碼后,沒(méi)有直接進(jìn)行 MySQL連接,中途重啟服務(wù)或者重啟機(jī)器等,導(dǎo)致密碼失效問(wèn)題,怎么處理呢,感興趣的朋友一起看看吧
    2019-11-11
  • Mysql中count(*)、count(1)、count(主鍵id)與count(字段)的區(qū)別

    Mysql中count(*)、count(1)、count(主鍵id)與count(字段)的區(qū)別

    本文主要介紹了Mysql中count(*)、count(1)、count(主鍵id)與count(字段)的區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • MySQL 8.0數(shù)據(jù)字典緩存管理機(jī)制解析

    MySQL 8.0數(shù)據(jù)字典緩存管理機(jī)制解析

    MySQL 8.0中的數(shù)據(jù)字典,通過(guò)對(duì)兩級(jí)緩存的逐級(jí)訪問(wèn),以及精妙的對(duì)緩存未命中情況的處理方式,有效的加速了在不同場(chǎng)景下數(shù)據(jù)庫(kù)對(duì)DD的訪問(wèn)速度,顯著的提升了數(shù)據(jù)庫(kù)訪問(wèn)元數(shù)據(jù)信息的效率,這篇文章主要介紹了解讀MySQL 8.0數(shù)據(jù)字典緩存管理機(jī)制,需要的朋友可以參考下
    2024-07-07
  • Linux下二進(jìn)制方式安裝mysql5.7版本和系統(tǒng)優(yōu)化的步驟

    Linux下二進(jìn)制方式安裝mysql5.7版本和系統(tǒng)優(yōu)化的步驟

    這篇文章主要介紹了Linux下二進(jìn)制方式安裝mysql5.7版本和系統(tǒng)優(yōu)化的步驟,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-01-01

最新評(píng)論