亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

MySQLexplain之possible_keys、key及key_len詳解

 更新時間:2023年08月07日 16:34:40   作者:昔拉天使  
這篇文章主要介紹了MySQLexplain之possible_keys、key及key_len的用法,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

MySQLexplain之possible_keys、key及key_len

possible_keys

顯示可能應(yīng)用在這張表中的索引,一個或多個。

查詢涉及到的字段上若存在索引,則該索引將被列出,但不一定被查詢實際使用

key

實際使用的索引。如果為NULL,則沒有使用索引

查詢中若使用了覆蓋索引,則該索引和查詢的selet字段重疊,僅出現(xiàn)在key列表中。

覆蓋索引:查詢的字段與所建索引的字段個數(shù)和順序剛好吻合

key_len

表示索引中使用的字節(jié)數(shù),可通過該列計算查詢中使用的索引的長度。

在不損失精確性的情況下,長度越短越好key_len顯示的值為索引字段的最大可能長度,并非實際使用長度,即key_len是根據(jù)表定義計算而得,不是通過表內(nèi)檢索出的

mysql索引possible_keys,key問題

explain中有兩個字段possible_keys,key。

  • possible_keys:表示可能用到的索引。
  • key:實際使用到的索引。

為什么會有單獨的兩列?

你的where條件中如果使用到了索引列字段,那么possible_keys會列出索引字段對應(yīng)的索引。

mysql可能會使用到他, 但是要看實際情況,什么是實際情況?

打個比方,如果你有一個按照日期創(chuàng)建的索引列,每天插入一條數(shù)據(jù),插入了一年,那么就有365條數(shù)據(jù)。

這個時候你的搜索條件是查詢昨天的數(shù)據(jù),sql類似于:

where create_date? > '昨天'?

explain結(jié)果如下:

幾個關(guān)鍵點:

  • type:range   表示你的sql適合范圍查詢
  • possible_keys:表示mysql可能會用到的索引(也就是create_date字段對應(yīng)的索引)。
  • key:實際用到的索引。
  • rows:1   如果查詢優(yōu)化器決定使用全表掃描的方式對某個表執(zhí)行查詢時,執(zhí)行計劃的 rows 列就代表預計需要掃描的行數(shù),如果使用索引來執(zhí)行查詢時,執(zhí)行計劃的 rows 列就代表預計掃描的索引記錄行數(shù)

因為我們只查昨天的,一天一條數(shù)據(jù),所以這里是1。

extra:Using index condition; 表示有些搜索條件中雖然出現(xiàn)了索引列,但卻不能使用到索引(這個是不是和possible_keys沖突了?有待驗證)

然后我們換一個查詢方式,查昨天之前的364天的數(shù)據(jù),sql類似如下:

幾個關(guān)鍵點:

  • type:all 表示你的sql適合范圍查詢
  • possible_keys:表示mysql可能會用到的索引(也就是create_date字段對應(yīng)的索引)。
  • key:實際用到的索引。
  • rows:1041   如果查詢優(yōu)化器決定使用全表掃描的方式對某個表執(zhí)行查詢時,執(zhí)行計劃的 rows 列就代表預計需要掃描的行數(shù),如果使用索引來執(zhí)行查詢時,執(zhí)行計劃的 rows 列就代表預計掃描的索引記錄行數(shù)

因為我們只查昨天之前的,所以數(shù)據(jù)量是1041條。

好了,得出的結(jié)論就是possible_keys會列出你的where條件中可能會使用到的索引列,但是具體用不到這個索引,是需要根據(jù)你的實際情況來的,如果你的條件,使用到索引和不使用到索引所消耗的效果差不錯(磁盤io,數(shù)據(jù)讀取等)。

舉例來說就是上面的例子,一個條件查詢了表中的百分之99的數(shù)據(jù),即使你的where條件中使用到了索引(并且使用了正確使用索引的姿勢。),那么優(yōu)化器也會選擇放棄使用這個索引,因為你使用了這個索引,還會額外帶來回表的代碼,那么還不如直接全表掃描。

那么他就會直接放棄使用這個索引,直接進行全表掃描。反之,如果你的數(shù)據(jù)查詢確實是非常的減少磁盤io這些,那么優(yōu)化器就會使用你這個索引。

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • MySQL SELECT同時UPDATE同一張表問題發(fā)生及解決

    MySQL SELECT同時UPDATE同一張表問題發(fā)生及解決

    例如用統(tǒng)計數(shù)據(jù)更新表的字段(此時需要用group子句返回統(tǒng)計值),從某一條記錄的字段update另一條記錄,而不必使用非標準的語句,等等感興趣的朋友可以參考下哈
    2013-03-03
  • Navicat for MySQL 11注冊碼\激活碼匯總

    Navicat for MySQL 11注冊碼\激活碼匯總

    Navicat for MySQL注冊碼用來激活 Navicat for MySQL 軟件,只要擁有 Navicat 注冊碼就能激活相應(yīng)的 Navicat 產(chǎn)品。這篇文章主要介紹了Navicat for MySQL 11注冊碼\激活碼匯總,需要的朋友可以參考下
    2020-11-11
  • MySQL中datetime時間字段的四舍五入操作

    MySQL中datetime時間字段的四舍五入操作

    這是由一則生產(chǎn)環(huán)境問題引出的MySQL對于datetime時間類型字段中毫秒的處理的深究,這篇文章主要給大家介紹了關(guān)于MySQL中datetime時間字段的四舍五入操作的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • Mysql并發(fā)常見的死鎖及解決方法

    Mysql并發(fā)常見的死鎖及解決方法

    死鎖是在并發(fā)執(zhí)行的過程中,兩個或多個事務(wù)相互等待對方釋放資源的情況,本文主要介紹了Mysql并發(fā)常見的死鎖及解決方法,具有一定的參考價值,感興趣的可以了解一下
    2023-12-12
  • MySQL replace into 語句淺析(二)

    MySQL replace into 語句淺析(二)

    這篇文章主要介紹了MySQL replace into 語句淺析(二),本文著重給出了幾個特殊案例分析,需要的朋友可以參考下
    2015-05-05
  • Mysql的DQL查詢操作全面分析講解

    Mysql的DQL查詢操作全面分析講解

    DQL(Data Query Language 數(shù)據(jù)查詢語言):用于查詢數(shù)據(jù)庫對象中所包含的數(shù)據(jù)。DQL語言主要的語句:SELECT語句。DQL語言是數(shù)據(jù)庫語言中最核心、最重要的語句,也是使用頻率最高的語句
    2022-12-12
  • mysql導出查詢結(jié)果到csv的實現(xiàn)方法

    mysql導出查詢結(jié)果到csv的實現(xiàn)方法

    下面小編就為大家?guī)硪黄猰ysql導出查詢結(jié)果到csv的實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-04-04
  • MySQL: mysql is not running but lock exists 的解決方法

    MySQL: mysql is not running but lock exists 的解決方法

    下面可以參考下面的方法步驟解決。最后查到一個網(wǎng)友說可能和log文件有關(guān),于是將log文件給移除了,再重啟MySQL終于OK了
    2009-06-06
  • MySQL觸發(fā)器學習總結(jié)

    MySQL觸發(fā)器學習總結(jié)

    創(chuàng)建觸發(fā)器,當往order表中添加記錄是,更新goods表,大家可以看下語句即可
    2012-09-09
  • mysql允許所有host訪問的方法

    mysql允許所有host訪問的方法

    下面小編就為大家?guī)硪黄猰ysql允許所有host訪問的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05

最新評論