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

納尼?MySQL 中 count(*) 比 count(1) 快?

數據庫 MySQL
InnoDB 需要將每一行數據拿出來,判斷該行數據對當前會話是否可見,如果可見,就統計該行數據,否則不予統計。

[[440783]]

今天有人跟我講 MySQL 中 count(1) 比 count(*) 快,這能忍?必須得和他掰扯掰扯。

聲明:以下討論基于 InnoDB 存儲引擎,MyISAM 因為情況特殊我在文末會單獨說一下。

先說結論:這兩個性能差別不大。

1.實踐

我準備了一張有 100W 條數據的表,表結構如下:

  1. CREATE TABLE `user` ( 
  2.   `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 
  3.   `username` varchar(255) DEFAULT NULL
  4.   `address` varchar(255) DEFAULT NULL
  5.   `passwordvarchar(255) DEFAULT NULL
  6.   PRIMARY KEY (`id`) 
  7. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; 

可以看到,有一個主鍵索引。

我們來用兩種方式統計一下表中的記錄數,如下:

可以看到,兩條 SQL 的執行效率其實差不多,都是 0.14s。

再來看另外兩個統計:

id 是主鍵,username 以及 address 則是普通字段。

可以看出,用 id 來統計,也有一丟丟優勢。松哥這里因為測試數據樣板比較小,所以效果不明顯,小伙伴們可以加大測試數據量,那么這種差異會更加明顯。

那么到底是什么原因造成的這種差異,接下來我們就來簡單分析一下。

2. explain 分析

我們先用 explain 來看下這幾個 SQL 不同的執行計劃:

可以看到,前三個統計方式的執行計劃是一樣的,后面兩個是一樣的。

我這里和大家比較下 explain 中的不同項:

  • type:前三個的 type 值為 index,表示全索引掃描,就是把整個索引過一遍就行(注意是索引不是整個表);后兩個的 type 值為 all,表示全表掃描,即不會使用索引。
  • key:這個表示 MySQL 決定采用哪個索引來優化對該表的訪問,PRIMARY 表示利用主鍵索引,NULL 表示不用索引。
  • key_len:這個表示 MySQL 使用的鍵長度,因為我們的主鍵類型是 INT 且非空,所以值為 4。
  • Extra:這個中的 Using index 表示優化器只需要通過訪問索引就可以獲取到需要的數據(不需要回表)。

通過 explain 我們其實也能大概看出來前三種統計方式的執行效率是要高一些的(因為用到了索引),而后面兩種的統計效率相對來說要低一些的(沒用索引,需要全表掃描)。

僅有上面的分析還不夠,我們再來從原理角度來分析一下。

3. 原理分析

3.1 主鍵索引與普通索引

在開始原理分析以前,我想先帶領大家看一下 B+ 樹,這對于我們理解接下來的內容有重要作用。

大家都知道,InnoDB 中索引的存儲結構都是 B+ 樹(至于什么是 B+ 樹,和 B 樹有什么區別,這個本文就不討論了,這兩個單獨都能整出來一篇文章),主鍵索引和普通索引的存儲又有所不同,如下圖表示主鍵索引:

可以看到,在主鍵索引中,葉子結點保存了每一行的數據。

而在普通索引中,葉子結點保存的是主鍵值,當我們使用普通索引去搜索數據的時候,先在葉子結點中找到主鍵,再拿著主鍵去主鍵索引中查找數據,相當于做了兩次查找,這也就是我們平常所說的回表操作。

3.2 原理分析

不知道小伙伴們有沒有注意過,我們學習 MySQL 的時候,count 函數是歸在聚合函數那一類的,就是 avg、sum 等,count 函數和這些歸在一起,說明它也是一個聚合函數。

既然是聚合函數,那么就需要對返回的結果集進行一行行的判斷,這里就涉及到一個問題,返回的結果是啥?我們分別來看:

對于 select count(1) from user; 這個查詢來說,InnoDB 引擎會去找到一個最小的索引樹去遍歷(不一定是主鍵索引),但是不會讀取數據,而是讀到一個葉子節點,就返回 1,最后將結果累加。

對于 select count(id) from user; 這個查詢來說,InnoDB 引擎會遍歷整個主鍵索引,然后讀取 id 并返回,不過因為 id 是主鍵,就在 B+ 樹的葉子節點上,所以這個過程不會涉及到隨機 IO(并不需要回表等操作去數據頁拿數據),性能也是 OK 的。

對于 select count(username) from user; 這個查詢來說,InnoDB 引擎會遍歷整張表做全表掃描,讀取每一行的 username 字段并返回,如果 username 在定義時候設置了 not null,那么直接統計 username 的個數;如果 username 在定義的時候沒有設置 not null,那么就先判斷一下 username 是否為空,然后再統計。

最后再來說說 select count(*) from user; ,這個 SQL 的特殊之處在于它被 MySQL 優化過,當 MySQL 看到 count(*) 就知道你是想統計總記錄數,就會去找到一個最小的索引樹去遍歷,然后統計記錄數。

因為主鍵索引(聚集索引)的葉子節點是數據,而普通索引的葉子節點則是主鍵值,所以普通索引的索引樹要小一些。然而在上文的案例中,我們只有主鍵索引,所以最終使用的就是主鍵索引。

現在,如果我修改上面的表,為 username 字段也添加索引,然后我們再來看 explain select count(*) from user; 的執行計劃:

可以看到,此時使用的索引就是 username 索引了,和我們前面的分析結果是一致的。

從上面的描述中我們就可以看出,第一個查詢性能最高,第二個次之(因為需要讀取 id 并返回),第三個最差(因為需要全表掃描),第四個的查詢性能則接近第一個。

4. MyISAM 呢?

可能有小伙伴知道,MyISAM 引擎中的 select count(*) from user; 操作執行起來是非常快的,那是因為 MyISAM 把表中的行數直接存在磁盤中了,需要的時候直接讀取出來就行了,所以非常快。

MyISAM 引擎之所以這樣做,主要是因為它是不支持事務的,所以它的統計實際上就非常容易,添加一行記錄一行就行了。

而我們常用的 InnoDB 卻不能這樣做!為啥?因為 InnoDB 支持事務!為了支持事務,InnoDB 引入了 MVCC 多版本并發控制,所以在數據讀取的時候可能會有臟讀、幻讀以及不可重復讀等問題,具體可以參考 https://www.bilibili.com/video/BV14L4y1B7mB 視頻。

所以,InnoDB 需要將每一行數據拿出來,判斷該行數據對當前會話是否可見,如果可見,就統計該行數據,否則不予統計。

當然,MySQL 中的 MVCC 實際上是一個非常宏大的話題,松哥以后有空了再和大家詳細介紹 MVCC。

 

好啦,現在小伙伴們懂了吧?有問題歡迎留言討論。

 

責任編輯:武曉燕 來源: 江南一點雨
相關推薦

2025-07-30 08:07:52

2024-06-04 00:00:20

數據庫

2022-03-31 16:47:30

mysqlcount面試官

2019-07-05 16:26:06

MySQLcount(1)count(*)

2024-11-15 09:29:12

2010-05-12 12:36:46

MySQL innod

2022-07-27 14:24:38

MySQL數據庫SQL

2022-06-30 08:01:53

mysqlmyisamcount

2010-11-22 13:23:52

MySQL數據庫優化

2021-07-13 07:52:03

SQL面試COUNT(*)

2021-05-19 07:35:00

MySQL數據庫COUNT

2011-08-02 18:19:01

2010-09-10 13:30:49

SQLCOUNT(*)函數

2022-05-09 08:01:23

countdistinctMySQL

2022-01-05 21:39:28

數據參數原理

2022-11-17 00:04:38

接口性能查詢

2020-12-03 09:05:38

SQL代碼方案

2010-09-10 13:37:59

SQLCOUNT()函數

2022-06-08 09:20:58

Python基準測試編程語言

2019-05-23 10:59:24

Java內存 C++
點贊
收藏

51CTO技術棧公眾號

国产一区二区在线观看免费播放 | 欧美熟妇乱码在线一区| 欧美精品啪啪| 日韩精品视频在线播放| 亚洲精品怡红院| caoporm免费视频在线| 成人av在线影院| 国产成人av网址| www.av免费| 天天躁日日躁狠狠躁欧美| 在线看国产日韩| 久久久久久久久网| 久热av在线| 国产乱一区二区| 国产91对白在线播放| 男人av资源站| 偷拍精品福利视频导航| 欧美一级xxx| 一级在线免费视频| 成人三级小说| 国产精品国模大尺度视频| 成人动漫在线观看视频| 中文字幕丰满人伦在线| 欧美午夜不卡| 中文字幕在线精品| 屁屁影院国产第一页| 91成人小视频| 欧美日韩免费在线| 97av中文字幕| 老司机在线永久免费观看| 91亚洲精品久久久蜜桃| 亚洲影院色无极综合| 最近中文在线观看| 性色一区二区三区| 久久久欧美精品| 91高清免费看| 欧美va久久久噜噜噜久久| 日韩经典中文字幕在线观看| 亚洲精品乱码久久久久久动漫| 国模视频一区| 色综合久久久久综合99| 国产女主播自拍| caoporm免费视频在线| 国产精品久久久久三级| 欧美一区二区视频在线| 性xxxx视频| 国产精品一二三| 91免费欧美精品| 亚洲在线免费观看视频| 日本女人一区二区三区| 国产97免费视| 日日夜夜操视频| 午夜在线精品偷拍| 欧美亚洲在线视频| 800av免费在线观看| 最新国产乱人伦偷精品免费网站| 欧美激情一区二区三区久久久| 印度午夜性春猛xxx交| 国产精品麻豆久久| 久久久精品网站| 免费看特级毛片| 91精品电影| 色综合视频一区中文字幕| 国产一二三区精品| 午夜日韩在线| 久久久久成人精品| 永久免费看片在线播放| 中日韩视频在线观看| 国产69久久精品成人看| 日本久久综合网| 日本美女一区二区三区| 国产精品视频一区二区高潮| 亚洲免费视频二区| 久草在线在线精品观看| 91在线视频九色| 亚洲第一天堂网| av动漫一区二区| 欧美精品国产精品久久久| 东热在线免费视频| 中文字幕在线播放不卡一区| 国产精品av免费| 黑人极品ⅴideos精品欧美棵| 亚洲图片欧美一区| 黄色片视频在线免费观看| 台湾佬中文娱乐久久久| 欧美日本国产视频| 免费观看黄网站| 日本国产精品| 中文字幕亚洲一区二区三区五十路| jizzjizzjizz国产| 欧美人成在线| 日本午夜人人精品| 国产欧美一级片| 成人av网站在线观看| 日韩欧美一区二区三区四区 | 欧美激情在线观看视频| 国产性xxxx高清| 日本在线不卡视频一二三区| 91久久久国产精品| 色wwwwww| 一区免费观看视频| 亚洲熟妇av日韩熟妇在线| 欧美va在线观看| 日韩欧美国产小视频| 黄色工厂在线观看| 无码一区二区三区视频| 91精品国产色综合| 国产精品乱码久久久| 99精品久久久久久| 黄色一级片网址| 少妇在线看www| 3d成人动漫网站| 国产一二三四五区| 影音先锋成人在线电影| 日韩av电影国产| 老司机午夜福利视频| 国产精品久久久久永久免费观看 | 国内国产精品久久| 久久精品女人的天堂av| 国产精品扒开做爽爽爽的视频 | 国产精品无码一区二区在线| 日韩成人在线一区| 亚洲欧美日韩高清| 国产乡下妇女做爰毛片| 久久成人av少妇免费| 欧美一区2区三区4区公司二百| av黄在线观看| 欧美日韩高清在线播放| 一区二区三区四区免费| 国产精品观看| 91九色单男在线观看| 国产大片在线免费观看| 午夜精品久久久久| 男人女人拔萝卜视频| 欧美www视频在线观看| 国产盗摄xxxx视频xxx69| 天天摸天天干天天操| 亚洲精品成人天堂一二三| 亚洲欧美国产日韩综合| 国产精品欧美三级在线观看| 69影院欧美专区视频| 亚洲av无码片一区二区三区| 亚洲天堂av老司机| 最新天堂在线视频| 91九色精品国产一区二区| 国产精品亚洲аv天堂网| 黑人与亚洲人色ⅹvideos| 欧美午夜精品久久久久久浪潮| 亚洲少妇一区二区三区| 欧美韩国一区| 成人av中文| 黄色美女视频在线观看| 精品91自产拍在线观看一区| 精品少妇theporn| 成人爽a毛片一区二区免费| 国产精品视频一二三四区| 日韩欧美中文字幕在线视频 | 精品人妻在线播放| 国产999精品久久| 少妇久久久久久被弄到高潮| 日韩精品亚洲专区在线观看| 欧美理论电影在线观看| av免费观看在线| 亚洲香肠在线观看| 制服丝袜在线第一页| 亚洲黄色高清| 欧美日韩综合精品| 福利一区二区免费视频| 久久久精品久久久久| 国产成人精品白浆久久69| 亚洲一区二区黄色| 内射中出日韩无国产剧情| 午夜亚洲伦理| 亚洲视频精品一区| 成人在线啊v| 久久久久免费视频| 日韩精品一二| 欧美日韩一区二区在线视频| 尤物在线免费视频| 成人动漫中文字幕| 熟女人妇 成熟妇女系列视频| 欧美亚洲在线日韩| 91精品在线观看视频| 懂色av一区| 亚洲视频axxx| 国产欧美日韩成人| 欧美日韩美女在线| 少妇高潮在线观看| 成人黄色在线网站| 激情内射人妻1区2区3区| 仙踪林久久久久久久999| 国产精品v欧美精品v日韩| 成人性生活视频| 日韩小视频在线| 欧美熟妇交换久久久久久分类| 在线视频亚洲一区| 欧美成人精品欧美一级| 久久久久久免费网| 麻豆网站免费观看| 久久成人亚洲| 精品无码av无码免费专区| 欧美美女在线| 99在线视频播放| 欧美成人app| 欧美激情国产高清| 一广人看www在线观看免费视频| 日韩久久精品一区| 亚洲一线在线观看| 色综合色综合色综合色综合色综合 | 亚洲精品在线国产| 国产精品普通话| 超碰国产一区| 国内精品久久久久影院优| 免费在线观看av片| 亚洲午夜女主播在线直播| 农村少妇久久久久久久| 9191成人精品久久| 欧美成人精品网站| 日韩欧美成人免费视频| 久久激情免费视频| 中文字幕在线不卡| 国产黄色大片免费看| 99精品视频一区二区| 97免费公开视频| 精品在线你懂的| 手机在线看福利| 免费视频一区二区三区在线观看| 久久这里只有精品8| 久久要要av| 亚洲电影网站| 激情五月色综合国产精品| 国产在线精品一区| 国产伦乱精品| 高清不卡日本v二区在线| 成人国产精品一区二区网站| 国产精品女人网站| 成人不卡视频| 国产精品美女免费视频| 色老太综合网| 欧美猛男性生活免费| 亚洲欧美色视频| 日韩av在线免费| 亚洲第九十九页| 亚洲精品一区二区三区蜜桃下载| 国产一区二区在线视频聊天| 日韩欧美成人免费视频| 中文字幕免费观看| 欧美性xxxx| 91浏览器在线观看| 福利视频第一区| 日韩人妻无码一区二区三区99| 亚洲男帅同性gay1069| 中国特黄一级片| 国产精品丝袜91| 国产精品成人无码免费| av毛片久久久久**hd| 波多野结衣福利| 99久久99久久精品国产片果冻| 久久无码专区国产精品s| 国产精品99久久久久久久vr| 日本r级电影在线观看| 韩国理伦片一区二区三区在线播放 | 亚洲一区国产精品| 日韩免费一级| 国产福利不卡| 国产精东传媒成人av电影| 精品无码久久久久久久动漫| 另类图片第一页| 精品国产乱码久久久久久郑州公司 | 欧美日韩三级在线| 一级黄色片在线看| 91精品国产黑色紧身裤美女| 韩国中文字幕hd久久精品| 精品福利av导航| 无码精品在线观看| 中文字幕精品www乱入免费视频| av在线免费一区| 久久久国产精品亚洲一区| 男女在线视频| 91超碰caoporn97人人| 亚洲风情在线资源| 成人在线一区二区| 97青娱国产盛宴精品视频| 国产乱码精品一区二区三区中文 | 日本成人xxx| 99久久99久久久精品齐齐| brazzers精品成人一区| 国产日韩一级二级三级| 国产一二三四区| 亚洲成av人片一区二区梦乃| 99久在线精品99re8热| 偷窥国产亚洲免费视频| 国产无遮挡又黄又爽又色视频| 欧美日韩国产首页| 国产高中女学生第一次| 日韩成人av在线| 国产精品视频一区二区久久| 久久夜色精品亚洲噜噜国产mv| 亚洲h片在线看| 国产精品免费视频久久久| 国产一区二区久久久久| 精品国产乱码久久久久久108| 亚洲成av人电影| 国产超级av在线| 国产一区二区免费视频| 夜夜春很很躁夜夜躁| 一区二区成人在线| wwwwww在线观看| 亚洲精品成人久久久| 尤物网在线观看| 欧美大尺度激情区在线播放| 亚州一区二区三区| 97自拍视频| 精品美女久久| 男女日批视频在线观看| 久久99精品久久只有精品| 亚洲av无码一区二区二三区| 亚洲欧洲综合另类| 好吊色在线视频| 日韩成人激情视频| 免费在线观看av网站| 777午夜精品福利在线观看| 永久免费精品视频| 亚洲精品成人久久久998| 综合久久亚洲| 久久国产激情视频| xnxx国产精品| 中文字幕手机在线观看| 欧美区视频在线观看| 你懂的网站在线| 国产69精品久久久久9| 欧美一级免费| 欧美日韩一区在线视频| 香蕉av777xxx色综合一区| 久草福利在线观看| 国产精品女人毛片| 丰满熟女人妻一区二区三| 亚洲电影在线观看| 黄网站视频在线观看| 91美女高潮出水| 成人区精品一区二区婷婷| 中文久久久久久| 久久婷婷综合激情| 亚洲第一在线播放| 亚洲成人精品久久久| 91麻豆一二三四在线| 国产日韩欧美在线观看| 97精品国产| 色悠悠久久综合网| 99久久久免费精品国产一区二区| 国产精品成人aaaa在线| 欧美成人性战久久| av日韩中文| 成人综合电影| 一区在线视频| 免费在线观看成年人视频| 亚洲高清在线精品| 草草视频在线播放| 久久久久久一区二区三区| 91夜夜蜜桃臀一区二区三区| 很污的网站在线观看| 大陆成人av片| 精品无码一区二区三区电影桃花| 亚洲第一页中文字幕| cao在线视频| 欧美中日韩免费视频| 亚洲一区二区三区四区五区午夜| 中国特级黄色大片| 欧美视频在线免费| 国产免费av高清在线| 国产精品电影网站| 欧美福利影院| 亚洲精品无码一区二区| 欧美日韩一区二区精品| 日本天堂在线| 国产精品九九久久久久久久| 久久久久久久久久久久久久| 在线能看的av网站| 亚洲香肠在线观看| 手机看片国产1024| 日本精品在线视频| 婷婷丁香综合| 亚洲日本久久久| 在线观看av一区| 国产不卡在线| 国产精品免费一区二区三区观看| 免费日韩精品中文字幕视频在线| 久久亚洲AV无码专区成人国产| 5月丁香婷婷综合| 激情av在线| 欧美成人免费在线| 国产精品一区二区不卡| 久久精品视频9| 中文字幕在线精品| 亚洲2区在线| 久久九九国产视频| 亚洲最大成人综合| 精品美女视频在线观看免费软件| 91嫩草国产在线观看| 亚洲欧美日韩精品一区二区 |