婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Mysql中explain作用詳解

Mysql中explain作用詳解

熱門標簽:地圖標注圖標素材入駐 百度地圖標注地方備注 好搜地圖標注 電話機器人免費嗎 龍圖酒吧地圖標注 電銷機器人價格多少錢一臺 怎么辦理400電話呢 400電話申請什么好 怎么申請400電話申請

一、MYSQL的索引

索引(Index):幫助Mysql高效獲取數據的一種數據結構。用于提高查找效率,可以比作字典。可以簡單理解為排好序的快速查找的數據結構。

索引的作用:便于查詢和排序(所以添加索引會影響where 語句與 order by 排序語句)。

在數據之外,數據庫還維護著滿足特定查找算法的數據結構,這些數據結構以某種方式引用數據。這樣就可以在這些數據結構上實現高級查找算法。這些數據結構就是索引。

索引本身也很大,不可能全部存儲在內存中,所以索引往往以索引文件的形式存儲在磁盤上。

我們平時所說的索引,如果沒有特別指明,一般都是B樹索引。(聚集索引、復合索引、前綴索引、唯一索引默認都是B+樹索引),除了B樹索引還有哈希索引。

優點:

A、提高數據檢索效率,降低數據庫的IO成本
B、通過索引列對數據進行排序,降低了數據排序成本,降低了CPU的消耗。

缺點:

A、索引也是一張表,該表保存了主鍵與索引字段,并指向實體表的記錄,所以索引也是占用空間的。
B、對表進行INSERT、UPDATE、DELETE操作時,MYSQL不僅會更新數據,還要保存一下索引文件每次更新添加了索引列字段的相應信息。

在實際的生產環境中我們需要逐步分析,優化建立最優的索引,并要優化我們的查詢條件。

索引的分類:

1、單值索引 一個索引只包含一個字段,一個表可以有多個單列索引。
2、唯一索引 索引列的值必須唯一,但允許有空值。
3、復合索引 一個索引包含多個列

一張表建議建立5個之內的索引

語法:

1、CREATE [UNIQUE] INDEX indexName ON myTable (columnName(length));
2、ALTER myTable Add [UNIQUE] INDEX [indexName] ON (columnName(length));

刪除:DROP INDEX [indexName] ON myTable;

查看: SHOW INDEX FROM table_name\G;

二、EXPLAIN 的作用

EXPLAIN :模擬Mysql優化器是如何執行SQL查詢語句的,從而知道Mysql是如何處理你的SQL語句的。分析你的查詢語句或是表結構的性能瓶頸。

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

(一)id列:

(1)、id 相同執行順序由上到下

mysql> explain 
  -> SELECT*FROM tb_order tb1
  -> LEFT JOIN tb_product tb2 ON tb1.tb_product_id = tb2.id
  -> LEFT JOIN tb_user tb3 ON tb1.tb_user_id = tb3.id;
+----+-------------+-------+--------+---------------+---------+---------+---------------------------+------+-------+
| id | select_type | table | type  | possible_keys | key   | key_len | ref            | rows | Extra |
+----+-------------+-------+--------+---------------+---------+---------+---------------------------+------+-------+
| 1 | SIMPLE   | tb1  | ALL  | NULL     | NULL  | NULL  | NULL           |  1 | NULL |
| 1 | SIMPLE   | tb2  | eq_ref | PRIMARY    | PRIMARY | 4    | product.tb1.tb_product_id |  1 | NULL |
| 1 | SIMPLE   | tb3  | eq_ref | PRIMARY    | PRIMARY | 4    | product.tb1.tb_user_id  |  1 | NULL |
+----+-------------+-------+--------+---------------+---------+---------+---------------------------+------+-------+

(2)、如果是子查詢,id序號會自增,id值越大優先級就越高,越先被執行。

mysql> EXPLAIN
  -> select * from tb_product tb1 where tb1.id = (select tb_product_id from tb_order tb2 where id = tb2.id =1);
+----+-------------+-------+-------+---------------+---------+---------+-------+------+-------------+
| id | select_type | table | type | possible_keys | key   | key_len | ref  | rows | Extra    |
+----+-------------+-------+-------+---------------+---------+---------+-------+------+-------------+
| 1 | PRIMARY   | tb1  | const | PRIMARY    | PRIMARY | 4    | const |  1 | NULL    |
| 2 | SUBQUERY  | tb2  | ALL  | NULL     | NULL  | NULL  | NULL |  1 | Using where |
+----+-------------+-------+-------+---------------+---------+---------+-------+------+-------------+

(3)、id 相同與不同,同時存在

mysql> EXPLAIN 
  -> select * from(select * from tb_order tb1 where tb1.id =1) s1,tb_user tb2 where s1.tb_user_id = tb2.id;
+----+-------------+------------+--------+---------------+---------+---------+-------+------+-------+
| id | select_type | table   | type  | possible_keys | key   | key_len | ref  | rows | Extra |
+----+-------------+------------+--------+---------------+---------+---------+-------+------+-------+
| 1 | PRIMARY   | derived2> | system | NULL     | NULL  | NULL  | NULL |  1 | NULL |
| 1 | PRIMARY   | tb2    | const | PRIMARY    | PRIMARY | 4    | const |  1 | NULL |
| 2 | DERIVED   | tb1    | const | PRIMARY    | PRIMARY | 4    | const |  1 | NULL |
+----+-------------+------------+--------+---------------+---------+---------+-------+------+-------+

derived2:衍生表 2表示衍生的是id=2的表 tb1

(二)select_type列:數據讀取操作的操作類型

  1、SIMPLE:簡單的select 查詢,SQL中不包含子查詢或者UNION。
  2、PRIMARY:查詢中包含復雜的子查詢部分,最外層查詢被標記為PRIMARY
  3、SUBQUERY:在select 或者WHERE 列表中包含了子查詢
  4、DERIVED:在FROM列表中包含的子查詢會被標記為DERIVED(衍生表),MYSQL會遞歸執行這些子查詢,把結果集放到零時表中。
  5、UNION:如果第二個SELECT 出現在UNION之后,則被標記位UNION;如果UNION包含在FROM子句的子查詢中,則外層SELECT 將被標記為DERIVED
  6、UNION RESULT:從UNION表獲取結果的select

(三)table列:該行數據是關于哪張表

(四)type列:訪問類型  由好到差system > const > eq_ref > ref > range > index > ALL

  1、system:表只有一條記錄(等于系統表),這是const類型的特例,平時業務中不會出現。
  2、const:通過索引一次查到數據,該類型主要用于比較primary key 或者unique 索引,因為只匹配一行數據,所以很快;如果將主鍵置于WHERE語句后面,Mysql就能將該查詢轉換為一個常量。
  3、eq_ref:唯一索引掃描,對于每個索引鍵,表中只有一條記錄與之匹配。常見于主鍵或者唯一索引掃描。
  4、ref:非唯一索引掃描,返回匹配某個單獨值得所有行,本質上是一種索引訪問,它返回所有匹配某個單獨值的行,就是說它可能會找到多條符合條件的數據,所以他是查找與掃描的混合體。
  5、range:只檢索給定范圍的行,使用一個索引來選著行。key列顯示使用了哪個索引。一般在你的WHERE 語句中出現between 、 、> 、in 等查詢,這種給定范圍掃描比全表掃描要好。因為他只需要開始于索引的某一點,而結束于另一點,不用掃描全部索引。
  6、index:FUll Index Scan 掃描遍歷索引樹(掃描全表的索引,從索引中獲取數據)。
  7、ALL 全表掃描 從磁盤中獲取數據 百萬級別的數據ALL類型的數據盡量優化。

(五)possible_keys列:顯示可能應用在這張表的索引,一個或者多個。查詢涉及到的字段若存在索引,則該索引將被列出,但不一定被查詢實際使用。

(六)keys列:實際使用到的索引。如果為NULL,則沒有使用索引。查詢中如果使用了覆蓋索引,則該索引僅出現在key列表中。覆蓋索引:select 后的 字段與我們建立索引的字段個數一致。

(七)ken_len列:表示索引中使用的字節數,可通過該列計算查詢中使用的索引長度。在不損失精確性的情況下,長度越短越好。key_len 顯示的值為索引字段的最大可能長度,并非實際使用長度,即key_len是根據表定義計算而得,不是通過表內檢索出來的。

(八)ref列:顯示索引的哪一列被使用了,如果可能的話,是一個常數。哪些列或常量被用于查找索引列上的值。

(九)rows列(每張表有多少行被優化器查詢):根據表統計信息及索引選用的情況,大致估算找到所需記錄需要讀取的行數。

(十)Extra列:擴展屬性,但是很重要的信息。

1、 Using filesort(文件排序):mysql無法按照表內既定的索引順序進行讀取。

 mysql> explain select order_number from tb_order order by order_money;
+----+-------------+----------+------+---------------+------+---------+------+------+----------------+
| id | select_type | table  | type | possible_keys | key | key_len | ref | rows | Extra     |
+----+-------------+----------+------+---------------+------+---------+------+------+----------------+
| 1 | SIMPLE   | tb_order | ALL | NULL     | NULL | NULL  | NULL |  1 | Using filesort |
+----+-------------+----------+------+---------------+------+---------+------+------+----------------+
1 row in set (0.00 sec)

說明:order_number是表內的一個唯一索引列,但是order by 沒有使用該索引列排序,所以mysql使用不得不另起一列進行排序。

2、Using temporary:Mysql使用了臨時表保存中間結果,常見于排序order by 和分組查詢 group by。

mysql> explain select order_number from tb_order group by order_money;
+----+-------------+----------+------+---------------+------+---------+------+------+---------------------------------+
| id | select_type | table  | type | possible_keys | key | key_len | ref | rows | Extra              |
+----+-------------+----------+------+---------------+------+---------+------+------+---------------------------------+
| 1 | SIMPLE   | tb_order | ALL | NULL     | NULL | NULL  | NULL |  1 | Using temporary; Using filesort |
+----+-------------+----------+------+---------------+------+---------+------+------+---------------------------------+
1 row in set (0.00 sec)

3、Using index 表示相應的select 操作使用了覆蓋索引,避免訪問了表的數據行,效率不錯。

如果同時出現Using where ,表明索引被用來執行索引鍵值的查找。

如果沒有同時出現using where 表明索引用來讀取數據而非執行查找動作。

mysql> explain select order_number from tb_order group by order_number;
+----+-------------+----------+-------+--------------------+--------------------+---------+------+------+-------------+
| id | select_type | table  | type | possible_keys   | key        | key_len | ref | rows | Extra    |
+----+-------------+----------+-------+--------------------+--------------------+---------+------+------+-------------+
| 1 | SIMPLE   | tb_order | index | index_order_number | index_order_number | 99   | NULL |  1 | Using index |
+----+-------------+----------+-------+--------------------+--------------------+---------+------+------+-------------+
1 row in set (0.00 sec)

4、Using where 查找

5、Using join buffer :表示當前sql使用了連接緩存。

6、impossible where :where 字句 總是false ,mysql 無法獲取數據行。

7、select tables optimized away:

8、distinct:

總結

以上就是本文關于Mysql中explain作用詳解的全部內容,希望對大家有所幫助。感興趣的朋友可以參閱:MYSQL子查詢和嵌套查詢優化實例解析、幾個比較重要的MySQL變量、ORACLE SQL語句優化技術要點解析等,如有不足之處,歡迎留言指出,小編會及時回復大家并進行改正。感謝朋友們對本站的支持!

您可能感興趣的文章:
  • MySQL查詢優化之explain的深入解析
  • mysql中explain用法詳解
  • mysql總結之explain
  • MySQL性能分析及explain的使用說明
  • mysql之explain使用詳解(分析索引)
  • 詳解MySQL中EXPLAIN解釋命令及用法講解
  • MySQL中執行計劃explain命令示例詳解
  • MYSQL explain 執行計劃
  • MySQL中EXPLAIN命令詳解
  • MySQL EXPLAIN輸出列的詳細解釋

標簽:固原 防疫工作 內江 汕尾 廣西 撫順 浙江 溫州

巨人網絡通訊聲明:本文標題《Mysql中explain作用詳解》,本文關鍵詞  Mysql,中,explain,作用,詳解,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Mysql中explain作用詳解》相關的同類信息!
  • 本頁收集關于Mysql中explain作用詳解的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    天天操天天干天天综合网| 国内精品伊人久久久久av一坑| 99re这里只有精品6| 国产精品一区二区视频| 国产成人综合网站| 成人自拍视频在线| 紧缚奴在线一区二区三区| 青青草国产成人99久久| 99久久精品情趣| 欧美午夜一区二区三区免费大片| 99精品欧美一区二区三区小说 | 国产精品无人区| 欧美午夜不卡视频| 精品国精品国产| 亚洲免费观看在线观看| 欧洲中文字幕精品| 欧美久久久久免费| 久久久久久99精品| 91偷拍与自偷拍精品| 欧美日韩免费一区二区三区视频| 91精品婷婷国产综合久久性色| 精品久久国产老人久久综合| 在线视频中文字幕一区二区| 精品少妇一区二区三区视频免付费 | 欧美三级电影网站| 欧美精品xxxxbbbb| 久久不见久久见中文字幕免费| 日本精品视频一区二区三区| 久久久综合精品| 亚洲综合在线电影| 成人免费一区二区三区在线观看| 久久电影网电视剧免费观看| 丁香激情综合国产| 日韩女优av电影在线观看| 久久久精品国产99久久精品芒果| 亚洲h在线观看| 成人a免费在线看| 天涯成人国产亚洲精品一区av| 亚洲午夜视频在线观看| 国产东北露脸精品视频| 亚洲欧美视频在线观看视频| 91激情五月电影| 欧美一级理论性理论a| 亚洲国产精品久久人人爱蜜臀| 国产人成亚洲第一网站在线播放| 蜜桃久久久久久久| 欧美色国产精品| 欧美人与禽zozo性伦| 亚洲免费电影在线| 91偷拍与自偷拍精品| 奇米色777欧美一区二区| 欧美日韩精品欧美日韩精品一| 亚洲精品国产精品乱码不99| 国产精品毛片高清在线完整版| 日韩欧美一二三区| 麻豆精品一区二区| 精品国产91乱码一区二区三区 | 亚洲色图欧洲色图| 99精品国产视频| 91成人免费在线视频| 久久99久国产精品黄毛片色诱| 日韩欧美国产麻豆| 国内不卡的二区三区中文字幕| 日韩av电影天堂| 成人aa视频在线观看| 久久亚洲影视婷婷| 亚洲资源中文字幕| 国产主播一区二区| 欧美日韩卡一卡二| 日韩精彩视频在线观看| 7777精品伊人久久久大香线蕉经典版下载 | 日韩欧美亚洲一区二区| 美女视频免费一区| 成人性生交大片免费看中文| 国产精品高潮呻吟久久| 亚洲伦在线观看| 在线免费观看视频一区| 欧美电影免费观看完整版| 美女在线观看视频一区二区| 日韩主播视频在线| www.色综合.com| 亚洲一区二三区| 精品国产髙清在线看国产毛片| 奇米影视一区二区三区| 成人av资源在线观看| 久久精品国产亚洲高清剧情介绍| 欧美xxxxx牲另类人与| 成人免费视频网站在线观看| 亚洲日本中文字幕区| av电影在线观看不卡| 水蜜桃久久夜色精品一区的特点| 69堂国产成人免费视频| 国产麻豆日韩欧美久久| 亚洲精品国产视频| 蜜桃视频在线一区| 亚洲欧美日韩国产手机在线| 成人午夜视频福利| 美腿丝袜亚洲色图| 一区二区三区在线免费播放| 久久久久久久网| 国产欧美精品国产国产专区| 亚洲不卡一区二区三区| 亚洲国产成人午夜在线一区| 国产毛片精品视频| 视频一区欧美精品| 亚洲综合成人在线| 国产一区二区三区黄视频| 日韩电影免费在线观看网站| 最近日韩中文字幕| 精品福利av导航| 久久午夜国产精品| 欧美日韩一区二区三区不卡| 国产高清不卡二三区| 亚洲成人手机在线| 亚洲国产精品麻豆| 在线观看区一区二| av电影天堂一区二区在线| 久久97超碰色| 91麻豆精品国产自产在线| 国产精品无码永久免费888| 色激情天天射综合网| 91国内精品野花午夜精品 | 首页欧美精品中文字幕| 久久综合九色综合欧美98| 在线综合视频播放| 亚洲精品一区二区精华| 中文字幕一区二区三区乱码在线| 久久久久久久久久久久久女国产乱| 日本高清不卡aⅴ免费网站| 欧美大黄免费观看| 日韩三级伦理片妻子的秘密按摩| 91麻豆精品久久久久蜜臀 | 亚洲综合在线电影| 久久国产精品72免费观看| 免费在线观看一区| 老司机精品视频线观看86| 色哦色哦哦色天天综合| 色婷婷狠狠综合| 免费国产亚洲视频| 欧美日韩国产经典色站一区二区三区| 欧美精品第1页| 精品一区二区三区免费| 欧美日韩高清一区| 日韩欧美你懂的| 91精品综合久久久久久| 亚洲一区二区三区爽爽爽爽爽| 奇米影视在线99精品| a级高清视频欧美日韩| 2024国产精品视频| 亚洲免费伊人电影| 久久亚洲影视婷婷| 一区二区三区在线免费| 男女男精品视频| 日韩欧美的一区二区| 国产三级久久久| 日韩伦理免费电影| 在线观看国产91| 欧美mv和日韩mv的网站| 国产精品区一区二区三区| 成人黄色av网站在线| 7777精品伊人久久久大香线蕉超级流畅| 韩国欧美国产1区| 久久久精品中文字幕麻豆发布| 亚洲已满18点击进入久久| 欧美日韩成人在线| 日韩在线一区二区| 成人高清视频免费观看| 欧美日韩在线综合| 日韩理论片一区二区| 美国毛片一区二区三区| 久久久噜噜噜久久中文字幕色伊伊 | 在线观看欧美精品| 精品久久久久久最新网址| 国产精品女同一区二区三区| av不卡在线观看| 欧美一区二区视频在线观看2020 | 日本韩国欧美国产| 久久综合久久99| 日韩中文欧美在线| 99久久精品国产精品久久| 亚洲h精品动漫在线观看| 丝袜美腿成人在线| 91电影在线观看| 国产精品久久久久久久裸模| 狠狠色综合日日| 欧美在线看片a免费观看| 男男视频亚洲欧美| 日本久久电影网| 中文字幕av不卡| 亚洲综合色自拍一区| 色狠狠av一区二区三区| 国产亚洲精品精华液| 久久一日本道色综合| 26uuu亚洲综合色| 日韩精品乱码av一区二区| 欧美色综合网站| 天天射综合影视| 欧美日韩黄色一区二区| 久久综合九色综合97婷婷女人| 久久久亚洲精华液精华液精华液|