精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Explain 顯示 Count(*) 使用了索引,實際卻是全表掃描

數據庫 MySQL
從 8.0.17(含)版本開始,直到目前的最新版本(8.0.33),如果表中有二級索引,explain 輸出的執行計劃也表示會使用二級索引,然而,實際執行過程中,InnoDB 卻會強制進行全表掃描,以使用主鍵索引的并行掃描能力。

這篇文章依然源于一位讀者的提問:explain 顯示 count(*) 使用了索引,optimizer trace 卻顯示為全表掃描,這是為什么?

還記得當時調試源碼的過程中,如果 explain 顯示會使用二級索引進行全索引掃描,執行時也確實只會從二級索引中讀取記錄,不會進行全表掃描。

不過,那會沒有關注過 optimizer trace 是怎么顯示的。

既然不能從記憶里找到答案,那就只能從源碼里找答案了。

擼完源碼發現:和 5.7.35 版本相比,8.0.32 的 count(*) 實現邏輯,確實有了一些變化。

接下來,我們一起來看看。

本文基于 MySQL 8.0.32 源碼,存儲引擎為 InnoDB。如需轉載,請聯系『一樹一溪』公眾號作者。

1、準備工作

創建測試表:

CREATE TABLE `t1` (
  `id` int unsigned NOT NULL AUTO_INCREMENT,
  `i1` int DEFAULT '0',
  PRIMARY KEY (`id`) USING BTREE,
  KEY `idx_i1` (`i1`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3

插入數據:

INSERT INTO `t1`(`id`, `i1`)
VALUES (10, 101), (20, 201), (30, 301);

2、問題重現及分析

explain 查看執行計劃:

EXPLAIN SELECT COUNT(*) FROM `t1`;

結果如下(只截取了部分字段):

圖片圖片

再來看看 optimizer trace 描述的執行計劃,依次執行以下 3 條 SQL:

-- 開啟 optimizer trace
SET optimizer_trace = "enabled=on";

-- 執行 SELECT 語句
SELECT COUNT(*) FROM `t1`;

-- 獲取 optimizer trace
SELECT * FROM information_schema.optimizer_trace;

結果如下(只截取了部分內容):

{
  "considered_execution_plans": [
    {
      "plan_prefix": [
      ],
      "table": "`t1`",
      "best_access_path": {
        "considered_access_paths": [
          {
            "rows_to_scan": 3,
            "access_type": "scan",
            "resulting_rows": 3,
            "cost": 0.55,
            "chosen": true
          }
        ]
      },
      "condition_filtering_pct": 100,
      "rows_for_plan": 3,
      "cost_for_plan": 0.55,
      "chosen": true
    }
  ]
}

我們來對比下 explain 和 optimizer trace 的結果:

  • explain 輸出結果中,type 字段值為 index、key 字段值為 idx_i1,表示會使用 idx_i1 作為覆蓋索引執行 select 語句。由于沒有 where 條件,select 語句會對二級索引 idx_i1 進行全索引掃描,以獲取 t1 表的記錄數量。
  • optimizer trace 輸出結果中,沒有顯示會使用索引 idx_i1,而且,access_type 為 scan,看起來像是會進行全表掃描。

我在 5.7.35 中調試了這條 SQL:

SELECT COUNT(*) FROM `t1`

可以證實,select 語句執行過程中,確實對 idx_i1 進行了全索引掃描,和 explain 輸出的執行計劃一致。

同時也確認了:不管是對主鍵索引進行全索引掃描(也就是全表掃描),還是對二級索引進行全索引掃描,optimizer trace 的輸出結果中,access_type 字段值都是 scan。

我又在 8.0.32 中調試了上面的 SQL,發現了新情況:InnoDB 對不包含 where 條件的 select count(*) from table 語句進行了特殊處理。

跟隨調試過程,我們一起來看看 InnoDB 做了什么特殊處理。

程序執行到 ha_records() 方法時,我們可以看到,index 參數的值是 1,這就是執行計劃確定要使用的索引 ID。

圖片圖片

我們在調試控制臺打印索引名字,可以看到 ID = 1 的索引就 idx_i1:

圖片圖片

ha_records() 會調用 records_from_index(),代碼如下:

圖片圖片

從以上代碼可以看到,ha_records() 把索引 idx_i1 的 ID 傳給了 records_from_index() 的第 2 個參數,但是,該方法的第 2 個參數,只有類型(uint),沒有名字,這說明第 2 個參數不能被使用。

也就是說,雖然執行計劃確定了要使用索引 idx_i1 來統計 t1 表的記錄數量,records_from_index() 卻沒有真正使用 idx_i1。

從代碼注釋也可以看到:在實現二級索引的并行掃描之前,records_from_index() 會強制使用主鍵索引來統計表中的記錄數量。

在 github 中追溯代碼提交歷史,發現 records_from_index() 是 8.0.17 版本新加的。

從這個版本開始,到最新的 8.0.33,對于不包含 where 條件的 select count(*) from table 語句,都會強制使用主鍵索引(也就是會進行全表掃描)。

之所以這么做,是為了使用多個線程對主鍵索引進行并行掃描,以提升執行速度。

3、總結

雖然本文內容比較短,但是本著完整的原則,還是進行個簡單的總結:

  • 8.0.16(含)版本之前,對于 select count(*) from table 語句,如果表中有二級索引,InnoDB 會選擇對某個二級索引進行全索引掃描,以獲取表中的記錄數量。
  • 從 8.0.17(含)版本開始,直到目前的最新版本(8.0.33),如果表中有二級索引,explain 輸出的執行計劃也表示會使用二級索引,然而,實際執行過程中,InnoDB 卻會強制進行全表掃描,以使用主鍵索引的并行掃描能力。
  • optimizer trace 的結果中,對于 select count(*) from table 語句,二級索引的全索引掃描和全表掃描同等對待,執行計劃的 access_type 字段值都是 scan。
責任編輯:姜華 來源: 一樹一溪
相關推薦

2025-11-06 01:21:00

2010-04-27 17:02:18

Oracle EXPL

2022-12-05 08:35:06

MySQL計算讀取

2010-05-19 10:37:06

MySQL expla

2017-09-05 12:44:15

MySQLSQL優化覆蓋索引

2024-10-28 08:34:06

2011-08-24 17:23:10

2023-02-26 01:00:12

索引優化慢查詢

2011-08-24 15:11:15

explain中文man

2010-04-28 17:14:38

Oracle EXPL

2018-04-04 12:05:04

Postgre數據planner

2020-08-10 11:20:59

索引MySQL數據庫

2010-04-14 16:45:29

Oracle 9i全索

2009-11-10 17:27:01

Oracle全表掃描

2009-11-11 09:40:53

Oracle索引掃描

2010-04-14 16:22:42

Oracle 9i

2019-07-29 09:42:56

索引死鎖MySQL

2010-10-12 13:55:41

MySQL EXPLA

2022-11-05 08:37:00

MySQL數據索引

2021-09-16 06:44:07

數據庫SQL語句
點贊
收藏

51CTO技術棧公眾號

成人亚洲性情网站www在线观看| www成人啪啪18软件| 国产亚av手机在线观看| 国产xxx精品视频大全| 久久久久久国产免费 | 久久国产精品99国产| 精品亚洲一区二区三区| 久久久精品麻豆| 米奇777四色精品人人爽| 国产盗摄视频一区二区三区| 97久久精品视频| 久久久视频6r| 亚洲**毛片| 黑人精品xxx一区| 亚洲伊人婷婷| 国产91绿帽单男绿奴| 99精品视频网| 日韩在线播放一区| 中文字幕1区2区| 丝袜美腿一区| 亚洲精品乱码久久久久久黑人 | 91精品日本| 一本久久综合亚洲鲁鲁五月天| 亚洲激情一区二区| 黑人乱码一区二区三区av| 老司机午夜精品视频| 欧美成人激情视频免费观看| av网站免费在线播放| 四虎精品永久免费| 欧美视频精品一区| 麻豆中文字幕在线观看| 黄色片网站免费在线观看| 六月天综合网| 久久久久久久久久久国产| 18啪啪污污免费网站| 精品av导航| 欧美一区二区在线观看| 国产淫片av片久久久久久| 4438x成人网全国最大| 久久九九全国免费| 国产亚洲欧美一区二区 | 日本高清无吗v一区| 婷婷五月综合缴情在线视频| 日韩福利一区二区| 成人一道本在线| 亚洲最大av网站| 国产天堂第一区| 国产深夜精品| 国语自产精品视频在线看一大j8 | 色综合老司机第九色激情| 99精品欧美一区二区| 欧美jizz19性欧美| 亚洲成人a**站| 日韩大尺度视频| 偷拍自拍亚洲| 欧美日韩综合视频网址| 国产v片免费观看| 欧美大胆的人体xxxx| 亚洲四区在线观看| 亚洲一区二区免费视频软件合集| 精品无人乱码| 91亚洲精品乱码久久久久久蜜桃| av资源一区二区| 99产精品成人啪免费网站| 久久精品国产在热久久| 国产精品视频中文字幕91| 日韩国产成人在线| 日韩电影在线一区二区| 国产精品扒开腿做爽爽爽男男| 男人的天堂一区二区| 欧美日韩国产亚洲一区| 精品中文字幕在线2019| 国内偷拍精品视频| 欧美激情成人在线| 欧美区二区三区| 久久久久久福利| 欧美日韩亚洲一区在线观看| 欧美成人性生活| 在线免费日韩av| 欧美特黄一区| 97在线视频免费播放| 91精品国产高潮对白| 亚洲深夜福利| 国产精品久久久久久av下载红粉| 天天干天天插天天射| 青青草成人在线观看| 国产精品美乳在线观看| 亚洲天堂网视频| 国产一区二区网址| 国产精品国产精品国产专区不卡| 四虎精品一区二区三区| 26uuu精品一区二区| 日韩av在线一区二区三区| 亚洲欧美视频一区二区| 亚洲精品成人a在线观看| 男女日批视频在线观看| 高清不卡av| 欧美美女一区二区三区| 少妇熟女视频一区二区三区 | 一本色道久久综合精品竹菊| 亚洲精品自拍网| 久久中文字幕一区二区| 亚洲国产精品电影在线观看| 亚洲熟女乱综合一区二区三区| 奇米色欧美一区二区三区| 俺去了亚洲欧美日韩| 久久国产精品二区| 久久亚洲国产精品一区二区| 国产色婷婷国产综合在线理论片a| 国产99999| 久久综合久久综合久久| 一区二区三区四区五区精品| 国产极品人妖在线观看| 91福利精品第一导航| 97免费公开视频| 蜜桃tv一区二区三区| 久久亚洲欧美日韩精品专区| 国产成人无码精品| 久久66热re国产| 精品亚洲一区二区三区四区五区高| av在线收看| 亚洲国产一区二区在线播放| 国产三级日本三级在线播放| 岛国精品一区| 久久网福利资源网站| 欧美国产成人精品一区二区三区| 蜜桃免费网站一区二区三区| 久久99精品久久久久久久久久| 九七久久人人| 91黄色免费看| 亚洲一级av无码毛片精品| 999视频精品| 日本在线精品视频| 无码精品视频一区二区三区| 成人欧美一区二区三区小说| 久久黄色免费看| 免费日韩一区二区三区| 欧美日韩成人免费| 97国产精品久久久| 国产欧美精品区一区二区三区 | 亚洲区免费视频| 精品成人国产| 91高跟黑色丝袜呻吟在线观看| 不卡在线视频| 91国偷自产一区二区三区成为亚洲经典 | 色av男人的天堂免费在线| 国产精品福利一区| 国产成人精品无码播放| 国产成人精品福利| 久久91精品国产91久久久| 97超碰中文字幕| 国产精品久久久久久久久久免费看| 国产91对白刺激露脸在线观看| 国产成人在线中文字幕| 欧美国产在线视频| 亚洲精品国产手机| 亚洲一区二区成人在线观看| 日韩精品视频一二三| 欧美日韩中字| 国产精品女人久久久久久| 国产在线播放av| 欧洲一区二区av| 免费一级做a爰片久久毛片潮| 日韩天天综合| 久久久久网址| 另类激情视频| 亚洲视频在线观看| 久久精品视频2| 国产日韩欧美激情| 天堂av在线网站| 99久久激情| 成人有码视频在线播放| 亚洲妇熟xxxx妇色黄| 欧美第一区第二区| 成人免费看片98| 99久久精品一区二区| 丰满爆乳一区二区三区| 日韩欧美国产大片| 国产福利精品视频| 成人性生交大片免费看午夜 | 欧美一级做a爰片免费视频| 国产午夜精品久久| 中文字幕国产免费| 中文字幕免费一区二区三区| eeuss一区二区三区| 91美女主播在线视频| 亚洲男人的天堂在线播放| 成人一二三四区| 亚洲人成精品久久久久| 国内自拍偷拍视频| 亚洲欧美视频一区二区三区| 色999日韩自偷自拍美女| 天堂久久一区| 国语自产精品视频在线看一大j8| 可以直接在线观看的av| 精品视频一区三区九区| 欧美黄色一级网站| 久久亚洲精华国产精华液| 在线观看亚洲色图| 欧美精品麻豆| 欧美日韩国产精品一卡| 欧美亚洲人成在线| 午夜精品久久久久久久男人的天堂 | 亚洲特级毛片| 奇米视频888战线精品播放| 福利精品一区| 麻豆国产va免费精品高清在线| 人妻少妇一区二区三区| 欧美日韩一区中文字幕| 青青草偷拍视频| 久久久综合精品| 少妇精品无码一区二区| 日本不卡免费在线视频| 成人国产在线看| 欧洲杯什么时候开赛| 国产精品一区二区免费| 日韩亚洲国产免费| 91高潮在线观看| av网站在线免费| 国产亚洲精品91在线| 亚洲乱熟女一区二区| 欧美系列日韩一区| 五月天综合激情| 亚洲精品少妇30p| 亚洲综合欧美综合| 不卡视频在线观看| 无码人妻一区二区三区在线视频| 日日夜夜精品视频天天综合网| 日韩久久久久久久久久久久| 色偷偷综合网| 欧美精品一区三区在线观看| 大香伊人久久精品一区二区| 国产一区二区视频在线观看| 芒果视频成人app| 久久人人爽人人爽人人片av高请| 国产原厂视频在线观看| 日韩电影中文字幕一区| 亚洲精品一级片| 欧美一区二区性放荡片| 最新国产中文字幕| 日韩欧美有码在线| 日本网站在线免费观看| 亚洲一区在线看| 男人与禽猛交狂配| 国产欧美一区二区精品性色超碰| 日本xxxx免费| 国产精品中文字幕一区二区三区| 一女二男3p波多野结衣| 日韩电影在线一区| 日韩手机在线观看视频| 亚洲精品四区| 国产在线播放观看| 在线日韩视频| 国产日韩亚洲欧美在线| 亚洲午夜极品| 少妇一晚三次一区二区三区| 欧美大片专区| 国产a级黄色大片| 欧美日韩国产高清| 国产va亚洲va在线va| 雨宫琴音一区二区在线| 欧美一区二区激情| 在线精品观看| 男人天堂999| 可以免费看不卡的av网站| 欧美一区二区三区爽大粗免费| 国产精品s色| 中文字幕人妻熟女人妻洋洋| 国产综合自拍| 日韩精品一区在线视频| 国产一级久久| 少妇性l交大片| 另类小说综合欧美亚洲| 欧美又黄又嫩大片a级| 国产福利一区二区三区视频| 9191在线视频| 99热精品国产| 国产高清一区二区三区四区| 国产精品网站在线观看| 三级在线观看免费大全| 一区二区三区欧美在线观看| 国产午夜小视频| 欧美性xxxx极品hd满灌| 日韩久久久久久久久久| 欧美另类久久久品| 午夜精品久久久久久久爽| 日韩精品极品毛片系列视频| 国产女主播在线直播| 亚洲欧美国产精品va在线观看| 肉丝一区二区| 精品国产网站地址| h片视频在线观看| 国产成人综合精品在线| 国产精品亚洲a| 亚洲小说区图片区都市| 欧美中文在线字幕| 成人国产网站| 97夜夜澡人人双人人人喊| 果冻天美麻豆一区二区国产| 热re99久久精品国99热蜜月| 亚洲男女av一区二区| 黄色动漫网站入口| 久久99精品一区二区三区三区| 色噜噜狠狠永久免费| 精品一区二区三区在线视频| youjizz.com国产| 欧美激情一区三区| 国产午夜免费视频| 欧美网站大全在线观看| 性欧美videos另类hd| 亚洲色图在线观看| 日本片在线看| 国产精品第二页| 人人爱人人干婷婷丁香亚洲| 激情小说综合网| 999久久久亚洲| 人妻熟女一二三区夜夜爱| 国产精品91xxx| 日本黄色激情视频| 欧美性猛交xxxx乱大交蜜桃 | 欧美一区二区在线视频| 三级在线观看| 久久手机精品视频| 亚洲一区二区三区四区| 国产精品久久久久久免费观看 | 欧美日韩一区二区电影| 欧美 日韩 国产 成人 在线 91| 日韩性生活视频| av2020不卡| 91情侣偷在线精品国产| 欧美日韩一二三四| 国产日产欧美视频| 成人午夜短视频| 免费一级suv好看的国产网站| 欧美性生活大片免费观看网址| www.天天干.com| 日韩色av导航| 精品亚洲美女网站| 精品在线不卡| 日韩视频一区| youjizz.com日本| 综合欧美亚洲日本| 中文字幕一区二区人妻视频| 日韩av影院在线观看| 2021国产在线| 51国产成人精品午夜福中文下载| 日韩免费在线| 亚洲精品自拍网| 日本一区二区三区久久久久久久久不 | 青青青视频在线免费观看| 色菇凉天天综合网| 国产视频精选在线| 国产乱人伦真实精品视频| 久久密一区二区三区| 国内av一区二区| 一区二区在线观看不卡| 成人午夜视频一区二区播放| 国内精品久久影院| 亚洲自拍电影| 污视频网站观看| 亚洲欧美韩国综合色| 欧美特级特黄aaaaaa在线看| 91精品国产电影| 精品视频免费| 在线免费黄色小视频| 午夜久久电影网| 高清毛片在线看| 成人精品在线视频| 精品99视频| 99国产精品免费| 欧美一区二区三区视频| japanese色国产在线看视频| 日本欧洲国产一区二区| 极品美女销魂一区二区三区免费| 麻豆影视在线播放| 亚洲精品在线观看www| 国产日本久久| 日韩成人手机在线| 久久久亚洲午夜电影| 国产伦一区二区| 欧美亚洲在线观看| 我不卡手机影院| 91精品小视频| 538在线一区二区精品国产| 国产精品一二三产区| 亚洲视频导航| av电影在线观看一区| 91久久国语露脸精品国产高跟| 97精品国产97久久久久久免费 | 成人高潮a毛片免费观看网站| 少妇性饥渴无码a区免费| 中文字幕五月欧美| 头脑特工队2在线播放| 91久久国产婷婷一区二区| 在线亚洲自拍| 日韩三级在线观看视频| 亚洲欧美在线x视频| 日本精品视频| 欧美第一页浮力影院| 欧美日韩亚洲激情|