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

MySQL EXPLAIN語句的使用示例

 更新時間:2021年03月24日 10:00:26   作者:超人不會飛  
這篇文章主要介紹了MySQL EXPLAIN語句的使用示例,幫助大家更好的理解和學(xué)習(xí)使用MySQL,感興趣的朋友可以了解下

在MySQL優(yōu)化的環(huán)節(jié)上,我們首先需要知道的就是我們當(dāng)前的這句SQL語句在實際的數(shù)據(jù)庫中究竟是怎么執(zhí)行的,才能談要如何優(yōu)化它。而在MySQL中,就給我們提供了模擬語句執(zhí)行的一個非常好用的關(guān)鍵字:EXPLAIN。EXPLAIN可以用來查看SQL語句的執(zhí)行效果,可以幫助選擇更好的索引和優(yōu)化查詢語句,寫出更好的優(yōu)化語句。因此今天我們就來講一講這個關(guān)鍵字的一些基礎(chǔ)的用法與應(yīng)用。

一、使用方法

EXPLAIN的使用方法非常簡單:

mysql> EXPLAIN SELECT * FROM user;

簡單來說,就是在原有的SQL語句前面加上EXPLAIN關(guān)鍵字,或者說是在EXPLAIN關(guān)鍵字后跟這你要檢查的SQL語句。

二、輸出結(jié)果

EXPLAIN語句的輸出結(jié)果才是我們想要的數(shù)據(jù),也是我們分析的重點(diǎn)。
我們先來看看上面的語句所給到的對應(yīng)的結(jié)果的形式:

+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------+
| 1 | SIMPLE  | user | NULL  | ALL | NULL   | NULL | NULL | NULL | 3 | 100.00 | NULL |
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------+

EXPLAIN語句給到我們的數(shù)據(jù)總共有10列,接下來我們看一下一些在性能優(yōu)化上有比較重要作用的數(shù)據(jù)列所代表的意思。

1.id

這個是select查詢的序列號。

2.select_type

當(dāng)我們的SQL語句是非select語句的時候(即delete,update...),這個字段的值就是對應(yīng)的操作類型(delete,update...)。

mysql> EXPLAIN INSERT INTO user VAULES(2,'ahong','31');

此時的輸出select_type就是我們對應(yīng)的INSERT:

+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------+
| 1 | INSERT  | user | NULL  | ALL | NULL   | NULL | NULL | NULL | NULL |  NULL | NULL |
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------+

而當(dāng)SQL語句時select語句的時候,他就是對應(yīng)的一些詳細(xì)的select的類型,可以有如下幾種:

SIMPLE:簡單SELECT(不使用UNION或子查詢等)
PRIMARY:最外面的SELECT
UNION:UNION中的第二個或后面的SELECT語句
DEPENDENT UNION:UNION中的第二個或后面的SELECT語句,取決于外面的查詢
UNION RESULT:UNION的結(jié)果。
SUBQUERY:子查詢中的第一個SELECT
DEPENDENT SUBQUERY:子查詢中的第一個SELECT,取決于外面的查詢
DERIVED:導(dǎo)出表的SELECT(FROM子句的子查詢)

下面就是一個最簡單的SIMPLE查詢的例子:

mysql> EXPLAIN SELECT * FROM user;
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------+
| 1 | SIMPLE  | user | NULL  | ALL | NULL   | NULL | NULL | NULL | 3 | 100.00 | NULL |
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------+

3.table

顯示這一步操作所訪問的數(shù)據(jù)是關(guān)于哪一張表的。

4.partitions

顯示表所使用的分區(qū),如果要統(tǒng)計十年公司訂單的金額,可以把數(shù)據(jù)分為十個區(qū),每一年代表一個區(qū)。這樣可以大大的提高查詢效率。

5.type

這是最重要的一列。顯示了連接使用了哪種類別,有無使用索引。是分析查詢性能的關(guān)鍵。
結(jié)果性能從優(yōu)到差分別有以下的情況:

system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL

而這幾種情況所代表的意義如下:

  • system、const: 可以將查詢的變量轉(zhuǎn)為常量. 如id=1; id為 主鍵或唯一鍵.
  • eq_ref: 訪問索引,返回某單一行的數(shù)據(jù).(通常在聯(lián)接時出現(xiàn),查詢使用的索引為主鍵或惟一鍵)
  • ref: 訪問索引,返回某個值的數(shù)據(jù).(可以返回多行) 通常使用=時發(fā)生
  • range: 這個連接類型使用索引返回一個范圍中的行,比如使用>或<查找東西,并且該字段上建有索引時發(fā)生的情況(注:不一定好于index)
  • index: 以索引的順序進(jìn)行全表掃描,優(yōu)點(diǎn)是不用排序,缺點(diǎn)是還要全表掃描
  • ALL: 全表掃描,應(yīng)該盡量避免_

一般來說,得保證查詢至少達(dá)到range級別,最好能達(dá)到ref,否則就可能會出現(xiàn)性能問題。

6.possible_key

顯示查詢語句有可能會使用到的索引列。取值可能為一個,多個或者null。

7.key

key列顯示的是該查詢語句實際使用的索引列。如為null,則表示沒有使用索引。
展示一下possible_key和key的實際效果:
下面是一個在age列上建立索引的數(shù)據(jù)表,我們進(jìn)行以下的查詢

mysql> explain select * from user where age = 1;

會得到以下的結(jié)果:

+----+-------------+-------+------------+------+---------------+------+---------+-------+------+----------+-------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-------+------------+------+---------------+------+---------+-------+------+----------+-------+
| 1 | SIMPLE  | user | NULL  | ref | age   | age | 5  | const | 1 | 100.00 | NULL |
+----+-------------+-------+------------+------+---------------+------+---------+-------+------+----------+-------+

8.key_len

顯示的是當(dāng)前的查詢語句所使用的索引的長度。在不損失精確性的情況下,長度越短越好.

9.ref

引用到的上一個表的列。

10.rows

根據(jù)表的情況和查詢語句的情況,MySQL會估算出返回最終結(jié)果所必須檢查的行的數(shù)量。該列的值越大查詢效率越差。

11.filtered

一個百分比的值,和rows 列的值一起使用,可以估計出查詢執(zhí)行計劃(QEP)中的前一個表的結(jié)果集,從而確定join操作的循環(huán)次數(shù)。小表驅(qū)動大表,減輕連接的次數(shù)。

12.extra

關(guān)于MySQL如何解析查詢的額外信息,主要有以下幾種:

Extra中包含的值:

  • using index: 只用到索引,可以避免訪問表,性能很高。
  • using where: 使用到where來過濾數(shù)據(jù), 不是所有的where clause都要顯示using where. 如以=方式訪問索引。
  • using tmporary: 用到臨時表去處理當(dāng)前的查詢。
  • using filesort: 用到額外的排序,此時mysql會根據(jù)聯(lián)接類型瀏覽所有符合條件的記錄,并保存排序關(guān)鍵字和行指針,然后排序關(guān)鍵字并按順序檢索行。(當(dāng)使用order by v1,而沒用到索引時,就會使用額外的排序)。
  • range checked for eache record(index map:N): 沒有好的索引可以使用。
  • Using index for group-by:__表明可以在索引中找到分組所需的所有數(shù)據(jù),不需要查詢實際的表。explain select user_id from t_order group by user_id;_

以上就是MySQL EXPLAIN語句的使用示例的詳細(xì)內(nèi)容,更多關(guān)于MySQL EXPLAIN語句的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • MYSQL 關(guān)于兩個經(jīng)緯度之間的距離由近及遠(yuǎn)排序

    MYSQL 關(guān)于兩個經(jīng)緯度之間的距離由近及遠(yuǎn)排序

    本篇文章是對MYSQL中關(guān)于兩個經(jīng)緯度之間的距離由近及遠(yuǎn)排序的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-07-07
  • Mysql之如何實現(xiàn)全外連接

    Mysql之如何實現(xiàn)全外連接

    這篇文章主要介紹了Mysql之如何實現(xiàn)全外連接問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • 淺談mysql join底層原理

    淺談mysql join底層原理

    本文文章主要介紹了淺談mysql join底層原理,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • MySQL中外鍵的創(chuàng)建、約束以及刪除

    MySQL中外鍵的創(chuàng)建、約束以及刪除

    這篇文章主要給大家介紹了關(guān)于MySQL中外鍵的創(chuàng)建、約束以及刪除的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • MySQL修改配置 區(qū)分大小寫

    MySQL修改配置 區(qū)分大小寫

    修改MySql Server安裝目錄下的 my.ini 文件,在mysqld節(jié)下加入下面一行 set-variable=lower_case_table_names=0 (0:大小寫敏感;1:大小寫不敏感)最后重啟一下MySql服務(wù)即可。
    2010-12-12
  • MySQL覆蓋索引的使用示例

    MySQL覆蓋索引的使用示例

    如果一個索引包含(或覆蓋)所有需要查詢的字段的值,稱為‘覆蓋索引’。這篇文章主要給大家介紹了關(guān)于MySQL覆蓋索引的相關(guān)資料,需要的朋友可以參考下
    2021-01-01
  • Mysql字符串處理函數(shù)詳細(xì)介紹、總結(jié)

    Mysql字符串處理函數(shù)詳細(xì)介紹、總結(jié)

    這篇文章主要介紹了Mysql字符串處理函數(shù)詳細(xì)介紹、總結(jié),需要的朋友可以參考下
    2014-04-04
  • Linux環(huán)境下安裝MySQL8.0的完整步驟

    Linux環(huán)境下安裝MySQL8.0的完整步驟

    數(shù)據(jù)庫想必大家都很熟悉,但是要在服務(wù)器上自己來安裝數(shù)據(jù)庫,還是會出現(xiàn)不少的問題,下面這篇文章主要給大家介紹了關(guān)于在Linux環(huán)境下安裝MySQL8.0的完整步驟,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08
  • 在CentOS上安裝phpMyAdmin的教程

    在CentOS上安裝phpMyAdmin的教程

    這篇文章主要介紹了在CentOS上安裝phpMyAdmin的教程,phpMyAdmin是一款借助PHP腳本來操作MySQL的工具,非常具有人氣,需要的朋友可以參考下
    2015-06-06
  • MySQL的批量更新和批量新增優(yōu)化方式

    MySQL的批量更新和批量新增優(yōu)化方式

    這篇文章主要介紹了MySQL的批量更新和批量新增優(yōu)化方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-03-03

最新評論

依安县| 罗源县| 广饶县| 沭阳县| 抚顺县| 金平| 桃园县| 称多县| 昌江| 新巴尔虎右旗| 峨眉山市| 贵溪市| 壤塘县| 武定县| 南华县| 大连市| 乳源| 沙雅县| 济源市| 满城县| 蒲江县| 涞源县| 镇康县| 永川市| 凤翔县| 临沂市| 吴忠市| 淮安市| 梅州市| 汽车| 泗洪县| 深圳市| 布尔津县| 海盐县| 西林县| 昆明市| 左云县| 民权县| 永州市| 盐边县| 九寨沟县|