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

MySQL explain獲取查詢指令信息原理及實例

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

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

一、語法

只需要在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相同時,從上到下執(zhí)行。

2、select_type:顯示對應(yīng)行是簡單還是復雜查詢

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

2)SUBQUERY:表示是個子查詢

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

4)UNION:

3、table:表示訪問哪個表

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

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

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

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

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

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

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

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

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

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

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

9、ref:

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

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

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

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

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

3)Using temporary:表示MySQL對查詢結(jié)果排序時會使用一個臨時表。

三、示例

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

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

示例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個字節(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是一個唯一性索引字段,字段類型為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í)行一個全表掃描,再通過主鍵進行關(guān)聯(lián)

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • mysql-joins具體用法說明

    mysql-joins具體用法說明

    這篇文章主要介紹了mysql-joins具體用法說明,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • 淺談MySQL為什么會選錯索引

    淺談MySQL為什么會選錯索引

    本文主要介紹了淺談MySQL為什么會選錯索引,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-03-03
  • linux下mysql亂碼問題的解決方案

    linux下mysql亂碼問題的解決方案

    今天小編就為大家分享一篇關(guān)于linux下mysql亂碼問題的解決方案,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • mysql計算時間差函數(shù)

    mysql計算時間差函數(shù)

    MySql計算兩個日期的時間差函數(shù)TIMESTAMPDIFF用法,只要用一句SQL語句就可以辦到了。
    2013-11-11
  • MySQL實現(xiàn)字符串的拼接,截取,替換,查找位置的操作

    MySQL實現(xiàn)字符串的拼接,截取,替換,查找位置的操作

    這篇文章主要介紹了MySQL實現(xiàn)字符串的拼接,截取,替換,查找位置的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • 詳解MySQL如何保證數(shù)據(jù)一致性

    詳解MySQL如何保證數(shù)據(jù)一致性

    對于一個數(shù)據(jù)庫而言,除了數(shù)據(jù)的持久性、不丟失之外,一致性也是非常重要的,不然這個數(shù)據(jù)是沒有任何意義的,在使用MySQL時,數(shù)據(jù)不一致的情況也可能出現(xiàn),所以,本文就來看看MySQL是如何保證數(shù)據(jù)一致的,需要的朋友可以參考下
    2024-01-01
  • mysql中的int類型對應(yīng)于java中的Long類型詳解

    mysql中的int類型對應(yīng)于java中的Long類型詳解

    這篇文章主要介紹了mysql中的int類型對應(yīng)于java中的Long類型,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • centos下安裝mysql服務(wù)器的方法

    centos下安裝mysql服務(wù)器的方法

    本篇文章是對在centos下安裝mysql服務(wù)器的方法進行了詳細的分析介紹,需要的朋友參考下
    2013-06-06
  • mysql中distinct和group?by的區(qū)別淺析

    mysql中distinct和group?by的區(qū)別淺析

    distinct簡單來說就是用來去重的,而group by的設(shè)計目的則是用來聚合統(tǒng)計的,兩者在能夠?qū)崿F(xiàn)的功能上有些相同之處,但應(yīng)該仔細區(qū)分,下面這篇文章主要給大家介紹了關(guān)于mysql中distinct和group?by區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2023-05-05
  • MySQL中的CONCAT函數(shù)使用教程

    MySQL中的CONCAT函數(shù)使用教程

    這篇文章主要介紹了MySQL中的CONCAT函數(shù)使用教程,是Python入門學習中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-05-05

最新評論

南岸区| 竹北市| 蒙阴县| 清新县| 辽阳市| 太谷县| 连江县| 景宁| 青海省| 临城县| 昆山市| 册亨县| 丰城市| 敖汉旗| 哈尔滨市| 阿荣旗| 淮南市| 贵阳市| 沧州市| 宁陕县| 龙江县| 海淀区| 柯坪县| 辽中县| 五原县| 伽师县| 龙门县| 宜昌市| 东港市| 海口市| 扶余县| 南木林县| 金秀| 房山区| 通山县| 武威市| 哈尔滨市| 伽师县| 莱芜市| 连平县| 灵川县|