久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

count(1)比count(*)效率高,?

 怡紅公子0526 2022-04-14

SELECT COUNT(*) FROM table_name是個再常見不過的統(tǒng)計需求了。
本文帶你了解下MysqlCOUNT函數(shù),。

一、COUNT函數(shù)

關(guān)于COUNT函數(shù),,在MySQL官網(wǎng)中有詳細介紹

風(fēng)塵博客

翻譯一下:

  1. COUNT(expr) ,,返回SELECT語句檢索的行中expr的值不為NULL的數(shù)量,結(jié)果是一個BIGINT值。
  2. 如果查詢結(jié)果沒有命中任何記錄,,則返回0
  3. COUNT(*) 的統(tǒng)計結(jié)果中,,會包含值為NULL的行數(shù)。

《阿里巴巴Java開發(fā)手冊》也有如下要求:

風(fēng)塵博客

二、COUNT(列名)COUNT(常量)COUNT(*)

前面我們提到過COUNT(expr)用于做行數(shù)統(tǒng)計,,那么COUNT(列名),、 COUNT(常量)COUNT(*)這三種語法中,expr分別是列名,、 常量 和 *,。

2.1 COUNT(*)COUNT(常量)

在列名、常量和 *這三個條件中,,常量是一個固定值,,肯定不為NULL*可以理解為查詢整行,,所以肯定也不為NULL,,那么就只有列名的查詢結(jié)果可能是NULL

所以,, COUNT(常量)COUNT(*)表示的是直接查詢符合條件的數(shù)據(jù)庫表的行數(shù),。而COUNT(列名)表示的是查詢符合條件的列的值不為NULL的行數(shù)。

2.2 COUNT(*)COUNT(1)區(qū)別

COUNT(1)就是COUNT(常量),,對于這二者到底有沒有區(qū)別:

  1. 有的說COUNT(*)執(zhí)行時會轉(zhuǎn)換成COUNT(1),,所以COUNT(1)少了轉(zhuǎn)換步驟,所以更快,。
  2. 還有的說,,因為MySQL針對COUNT(*)做了特殊優(yōu)化,所以COUNT(*)更快,。

到底哪種說法是對的,?看下MySQL官方文檔:

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

通過文檔,對于COUNT(1)COUNT(*),,MySQL的優(yōu)化是完全一樣的,,根本不存在誰比誰快!

2.3 COUNT(列名)

相較于前兩者,,COUNT(列名)的查詢就比較簡單粗暴了,,就是進行全表掃描,然后判斷指定字段的值是不是為NULL,,不為NULL則累加,。

相比COUNT(*)COUNT(列名)多了一個步驟就是判斷所查詢的字段是否為NULL,,所以他的性能要比COUNT(*)慢,。
here和group的條件查詢。

2.4 SQL92

除了查詢得到結(jié)果集有區(qū)別之外,,COUNT(*)相比COUNT(常量)COUNT(列名)來講,,COUNT(*)SQL92定義的標(biāo)準(zhǔn)統(tǒng)計行數(shù)的語法,,因為他是標(biāo)準(zhǔn)語法,所以MySQL數(shù)據(jù)庫對他進行過很多優(yōu)化,。

SQL92,,是數(shù)據(jù)庫的一個ANSI/ISO標(biāo)準(zhǔn)。它定義了一種語言(SQL)以及數(shù)據(jù)庫的行為(事務(wù),、隔離級別等)。

2.5 COUNT(*)優(yōu)化

因為COUNT(*)SQL92定義的標(biāo)準(zhǔn)統(tǒng)計行數(shù)的語法,,所以MySQL對其進行了很多優(yōu)化:

  1. MyISAM中會直接把表的總行數(shù)單獨記錄下來供COUNT(*)查詢
  2. InnoDB會在掃表的時候選擇最小的索引來降低成本,。

這些優(yōu)化的前提都是沒有進行wheregroup的條件查詢,更多請參考MySQL 全表 COUNT(*) 簡述

三,、總結(jié)

COUNT函數(shù)用于統(tǒng)計表行數(shù),,按照效率比較的話:

count(*)=count(常量)>count(列名)

3.1 小建議

既然 count(*) 在查詢上依賴于所有的數(shù)據(jù)集,所以我們在設(shè)計上也需要盡量的規(guī)避全量 count,。

通常情況我們針對可預(yù)見count 查詢會做適當(dāng)?shù)木彺?,可以?Redis,也可以是獨立的 MySQL count 表,。

3.2 技術(shù)交流

  1. 風(fēng)塵博客
  2. 風(fēng)塵博客-掘金
  3. 風(fēng)塵博客-博客園
  4. Github

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多