日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql下count(*)和count(1)的区别

發布時間:2025/4/16 数据库 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql下count(*)和count(1)的区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

今天看公司項目發現了一個奇怪sql寫法

select count(8) from ....

這也許是開發人員不小心或者是習慣把*寫成了8,當然這并不影響程序運行的結果。

由此引發了我想知道count(*)和count(1)的區別。

其實關于count(*)和count(1)性能的爭論文章特別多,這類文章都沒講到重點。

我覺得我今天說的這個答案算的上是很權威的,因為答案來自mysql官方文檔關于count函數的解釋。

現在我能找到的mysql最老的版本文檔是5.5 鏈接如下:

https://dev.mysql.com/doc/refman/5.5/en/group-by-functions.html

關于 count(*)和count(1) 有這樣一段話:

InnoDB handles SELECT COUNT(*) and SELECT COUNT(1) operations in the same way. There is no performance difference.

就是說在 InnoDB 引擎下,這兩個其實沒有性能上的差異。

但是在MyISAM引擎是有差異的,原文是這樣說的:

For MyISAM tables, COUNT(*) is optimized to return very quickly if the SELECT retrieves from one table, no other columns are retrieved, and there is no WHERE clause. For example: This optimization only applies to MyISAM tables, because an exact row count is stored for this storage engine and can be accessed very quickly. COUNT(1) is only subject to the same optimization if the first column is defined as NOT NULL.

MyISAM引擎對count(*)進行了優化,可以快速得到結果. 但是如果使用count(1),那么如果當第一列的結果不為空的時候才有這種優化,所以在MyISAM引擎下 如果第一列為空的話count(1)的查詢效率是沒有count(*)高的。

接下來對mysql官方的文檔大致翻譯下:

COUNT(*)返回檢索到的行數的計數,不管它們是否包含空值。

對于InnoDB這樣的事務性存儲引擎,存儲準確的行數是不太現實的,因為多個事務可能同時發生,每個事務都有可能影響計數。 InnoDB不保留表中的行數,因為并發事務可能同時“看到”不同的行數。因此,SELECT COUNT(*)語句只計算當前事務可見的行。

為了處理SELECT COUNT(*)語句,InnoDB掃描表的索引,如果索引不是完全在緩沖池中,那么這將花費一些時間。為了更快地計數,創建一個計數器表,并讓應用程序根據它的插入和刪除來更新它。但是,當數千個并發事務同時啟動對同一個計數器表更新時,這種方法可能無法很好地維護。如果想要一個大致的結果,則使用SHOW TABLE STATUS。

InnoDB以同樣的方式處理SELECT COUNT(*)和SELECT COUNT(1)操作。沒有性能差異。 對于MyISAM表,如果使用SELECT從一個表中檢索,沒有檢索其他列,也沒有WHERE子句,那么COUNT(*)被優化為快速返回。例如:

mysql> SELECT COUNT(*) FROM student;

這種優化只適用于MyISAM表,因為為這個存儲引擎存儲了準確的行數,并且可以非常快速地訪問。COUNT(1)只有在第一列被定義為NOT NULL時才進行相同的優化。

總結:

很明顯在進行統計的時候最好就是使用count(*),至少在5.5+的版本可以這樣做,不管是在InnoDB還是MyISAM都能達到最佳性能。

目前mysql官方最新的文檔版本是8.0,鏈接為:

https://dev.mysql.com/doc/refman/8.0/en/group-by-functions.html#function_count

這里我要插下嘴,在8.0版本的mysql,對于 count(*) 是做了額外的優化的, 優化內容大致是:

從MySQL 8.0.13開始,如果沒有額外的子句(如WHERE或GROUP BY),那么InnoDB表的tbl_name查詢性能中的SELECT COUNT(*)將針對單線程工作負載進行優化。除非索引或優化器提示指示優化器使用不同的索引,否則InnoDB進程通過遍歷最小的可用輔助索引來選擇COUNT(*)語句。如果不存在二級索引,InnoDB將通過掃描聚集索引來選擇COUNT(*)語句。

轉載于:https://my.oschina.net/110NotFound/blog/3032543

總結

以上是生活随笔為你收集整理的mysql下count(*)和count(1)的区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 中文字幕导航 | 久草免费在线视频观看 | 美日韩一区二区三区 | 欧美视频免费在线观看 | 日本黄色录像片 | 亚洲精品乱码久久久久久按摩观 | 亚洲精品97 | 樱花草涩涩www在线播放 | 香蕉视频久久久 | 在线观看免费成人 | 麻豆成人网 | 97精品人妻一区二区三区在线 | 国产欧美精品区一区二区三区 | 老妇女性较大毛片 | 5d肉蒲团之性战奶水 | 99色影院 | 福利影院av| 三级黄色在线播放 | 成人羞羞在线观看网站 | 久久艹精品 | 少妇又色又紧又大爽又刺激 | 日韩色在线 | 成人一区二区在线观看 | 人人爱av| 亚洲自拍偷拍在线 | 精品一区电影国产 | mm131美女视频 | 国产精品社区 | 日韩av有码 | 一区二区三区免费看 | 9191国产精品 | 97福利影院 | 精品人伦一区二区三区蜜桃网站 | 国产欧美日韩精品在线观看 | 五月婷婷网站 | 极度诱惑香港电影完整 | 日韩阿v| 亚洲影音先锋 | 亚洲天堂黄 | 午夜秋霞影院 | 日本黄色片免费 | 国产免费一区二区三区最新不卡 | 蜜桃av噜噜一区二区三区麻豆 | 亚洲成av人影院 | 亚洲色图21p | 三级a做爰全过程 | 免费毛片一级 | 天天综合人人 | 香蕉av一区二区三区 | 玖玖视频在线 | 免费黄色在线观看 | 中文字幕在线永久 | 一区二区网 | 久久中文字幕网 | 99涩涩| 亚洲高清无码久久久 | 中文字幕av在线播放 | 91一区二区国产 | 欧美做受xxxxxⅹ性视频 | 国产一区二区在线播放视频 | 成人性爱视频在线观看 | 色呦呦呦呦 | aa片在线观看视频在线播放 | 老汉色老汉首页av亚洲 | 日产电影一区二区三区 | 国内毛片毛片毛片毛片 | 三级视频国产 | 韩国久久久久久 | 日本大尺度电影免费观看全集中文版 | 国产不卡一区二区视频 | 国产性猛交xxxx免费看久久 | 日韩天堂在线视频 | 成人亚洲精品久久久久软件 | 国产精品精东影业 | 欧美a级片在线观看 | 国产美女明星三级做爰 | 91久久极品少妇xxxxⅹ软件 | 亚洲国产精品自拍 | 影音先锋在线国产 | www.麻豆av.com| 色噜噜狠狠一区二区三区果冻 | 亚洲国产精品成人久久蜜臀 | www.av免费| 欧美日韩国产麻豆 | 性爱视频在线免费 | 日韩成人在线播放 | 欧美一区二区三区啪啪 | 小珊的性放荡羞辱日记 | 久久在线视频免费观看 | 91无打码| 一本—道久久a久久精品蜜桃 | 少妇一级淫片免费放2 | 日韩av影片| 日韩精品网站 | 山村大伦淫第1部分阅读小说 | 欧美大片高清 | 欧洲丰满少妇做爰 | 欧美日韩久久 | 色欲一区二区三区精品a片 在线观看黄网站 |