国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Mysql - 一文搞清楚MySQL count(*)、count(1)、count(col)區別

一文搞清楚MySQL count(*)、count(1)、count(col)區別

2022-03-02 22:02碼猿筆記 Mysql

本文主要介紹了MySQL count(*)、count(1)、count(col)區別,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

在工作中遇到count(*)、count(1)、count(col) ,可能會讓你分不清楚,都是計數,干嘛這么搞這么多東西。

count 作用

COUNT(expression):返回查詢的記錄總數,expression 參數是一個字段或者 * 號。

測試

MySQL版本:5.7.29

創建一張用戶表,并插入一百萬條數據,其中gender字段有五十萬行是為null值的

CREATE TABLE `users` (
  `Id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT "id",
  `name` varchar(32) DEFAULT NULL COMMENT "名稱",
  `gender` varchar(20) DEFAULT NULL COMMENT "性別",
  `create_date` datetime DEFAULT NULL COMMENT "創建時間",
  PRIMARY KEY (`Id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT="用戶表";

count(*)

在 MySQL 5.7.18 之前,通過掃描聚集索引來InnoDB處理 語句。SELECT COUNT( *)從 MySQL 5.7.18 開始, 通過遍歷最小的可用二級索引來InnoDB處理SELECT COUNT( *)語句,除非索引或優化器提示指示優化器使用不同的索引。如果二級索引不存在,則掃描聚集索引。
大概意思就是有二級索引的情況下就使用二級索引,如果有多個二級索引優先選擇最小的那個二級索引來降低成本,沒有二級索引使用聚集索引。

下面通過測試來驗證這些觀點。

首先,在只有Id這一個主鍵索引的情況下查詢執行計劃,

一文搞清楚MySQL count(*)、count(1)、count(col)區別

可以看到,type是index也就是使用了索引,key是PRIMARY就是使用了主鍵索引,key_len=8。

其次在name字段上加上索引,再次使用執行計劃查看

一文搞清楚MySQL count(*)、count(1)、count(col)區別

可以看到同樣使用了索引,只不過索引用的是name字段的索引,key_len=99。

然后在保留name字段索引的情況下給create_date字段也加上索引,再次查看執行計劃

一文搞清楚MySQL count(*)、count(1)、count(col)區別

可以看到這次使用的是create_date字段的索引了,key_len=6。

不管上述是使用了哪個索引,其最后查詢到的總行數都是一百萬條,無論它們是否包含 NULL值。

count(1)

count(1) 和count(*) 執行查詢結果一樣,最終也是返回一百萬條數據,無論它們是否包含 NULL值。

count(col)

count(col) 統計某一列的值,又分為三種情況:

count(id): 統計id

和count(*) 執行查詢結果也是一樣,最終也是返回一百萬條數據.

count(index col):統計帶索引的字段

以count(name)進行查詢,執行計劃如下:

一文搞清楚MySQL count(*)、count(1)、count(col)區別

可以看到用的是索引字段進行統計,索引也命中了。
把一列中的name字段置為NULL,再進行count查詢,結果返回999999

一文搞清楚MySQL count(*)、count(1)、count(col)區別

再把這列的NULL值置為空字符串,再進行count查詢,結果返回1000000

一文搞清楚MySQL count(*)、count(1)、count(col)區別

所以,綜上簡單的使用索引字段統計行數能夠命中索引,并且只統計不為NULL值的行數。

count(normal col):統計不帶索引的字段

統計不帶索引的字段的話就不會使用索引,而且也是只統計不為NULL值的行數。

一文搞清楚MySQL count(*)、count(1)、count(col)區別

count(1)和count(*)取舍

之前也不知道在哪看到的或聽說的,count(1) 比count(*) 效率高,這是錯誤的認知,官網上有這么一句話,InnoDB handles SELECT COUNT( *) and SELECT COUNT(1) operations in the same way. There is no performance difference.
翻譯過來就是,InnoDB以同樣的方式處理SELECT COUNT( *)和SELECT COUNT(1) 操作,沒有性能差異。

對于MyISAM表, 如果從一個表中檢索,沒有檢索到其他列并且沒有 子句,COUNT(*)則優化為非常快速地返回 ,此優化僅適用于MyISAM 表,因為為此存儲引擎存儲了準確的行數,并且可以非常快速地訪問。 COUNT(1)僅當第一列定義為 時才進行相同的優化NOT NULL。----來自MySQL官網
這些優化都是建立在沒有where 和 group by的前提下的。

阿里開發規范中也提到

一文搞清楚MySQL count(*)、count(1)、count(col)區別

所以在開發中能用count(*) 就用count( *).

總結

count(*)、count(1)、count(id):返回查詢的記錄總數,無論字段是否包含空值,且count( )和count(1)效率是一樣的,沒差別,通過上面的執行計劃可以推斷count(id) 和count()、count(1) 效率應該也是一樣的或者說是很接近,有興趣的可以測試一下。
對統計帶非主鍵索引和不帶索引的字段進行統計的時候都是統計不為NULL的行數。

到此這篇關于一文搞清楚MySQL count(*)、count(1)、count(col)區別 的文章就介紹到這了,更多相關MySQL count(*),count(1),count(col)內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文地址:https://blog.csdn.net/qq_39654841/article/details/122787038

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 午夜小视频在线观看 | 亚洲成人精品 | 色婷婷综合久久久中文字幕 | 国产一区二区三区免费视频 | 91精品在线播放 | 日韩欧美中文字幕在线视频 | 国产一区二区精品 | 在线a视频网站 | 日韩高清中文字幕 | 欧美中文字幕一区二区三区 | 亚洲精品久久久一区二区三区 | 久久综合av | 亚洲综合日韩 | 午夜精品一区二区三区在线视频 | 日韩一区二区在线免费 | www.成人在线视频 | 成人精品福利视频 | 91在线精品一区二区三区 | 亚洲视频在线播放 | 97视频免费在线观看 | 黄篇免费观看 | 亚洲一区二区三区在线免费观看 | 久草成人网 | 欧美999| 精品久久久久久国产 | 高清国产午夜精品久久久久久 | 中文字幕精品一区二区三区精品 | 国产黄色电影 | 国产区视频在线观看 | 亚洲精品视频在线看 | 91免费版在线看 | 久久综合九色综合欧美狠狠 | 久久精品国产亚洲一区二区三区 | 亚洲日本欧美日韩高观看 | 精品成人佐山爱一区二区 | 国产一区二区三区在线 | 久久久精品天堂 | av大片| 欧美一区二区精品 | 亚洲黄页 | 日韩激情一级 |