91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySQL中Count函數怎么使用

發布時間:2022-11-29 17:08:16 來源:億速云 閱讀:184 作者:iii 欄目:MySQL數據庫

這篇文章主要介紹了MySQL中Count函數怎么使用的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇MySQL中Count函數怎么使用文章都會有所收獲,下面我們一起來看看吧。

count(*)、count(1)、count(id)的區別

count的含義:count() 是一個聚合函數,對于返回的結果集,一行行地判斷,如果 count 函數的參數不是 NULL,累計值就加 1,否則不加。最后返回累計值。

count(字段)比較特殊,則表示返回滿足條件的數據行里面,參數“字段”不為 NULL 的總個數

分析性能差別原則

  • server 層要什么就給什么;

  • InnoDB 只給必要的值;

  • 現在的優化器只優化了 count(*) 的語義為“取行數”,其他“顯而易見”的優化并沒有做

例子:

count(主鍵 id) 來說,InnoDB 引擎會遍歷整張表,把每一行的 id 值都取出來,返回給 server 層。server 層拿到 id 后,判斷是不可能為空的,就按行累加。

count(1) 來說,InnoDB 引擎遍歷整張表,但不取值。server 層對于返回的每一行,放一個數字“1”進去,判斷是不可能為空的,按行累加。

count(字段),server要字段,就返回字段,如果字段為空,就不做統計,字段的值過大,都會造成效率低下。

效率排序

count(字段)<count(主鍵 id)<count(1)≈count(*)

為什么count(*)最快?

優化器做了工作,找到最小的數來遍歷。

InnoDB 是索引組織表,主鍵索引樹的葉子節點是數據,而普通索引樹的葉子節點是主鍵值。所以,普通索引樹比主鍵索引樹小很多。對于 count(*) 這樣的操作,遍歷哪個索引樹得到的結果邏輯上都是一樣的。因此,MySQL 優化器會找到最小的那棵樹來遍歷。在保證邏輯正確的前提下,盡量減少掃描的數據量,是數據庫系統設計的通用法則之一。

關于NULL的幾個坑

// 數據中存在null值數據
select count(*) from audit_log a;
結果:1

select count(id) from audit_log a;
結果:0

我們看到count的結果不一致,記錄數應該是1,count(id)卻等于0

這是因為count(字段)是不統計,字段值為null的值

所以在字段為非空字段的情況下,需要使用count(*)來解決這個問題。

count(*)小結

  • MyISAM 表雖然 count(*) 很快,但是不支持事務;

  • show table status 命令雖然返回很快,但是不準確;

  • InnoDB 表直接 count(*) 會遍歷全表,雖然結果準確,但會導致性能問題。

關于“MySQL中Count函數怎么使用”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“MySQL中Count函數怎么使用”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

忻州市| 石楼县| 大城县| 承德市| 紫金县| 遂宁市| 囊谦县| 旬阳县| 南充市| 平顶山市| 新巴尔虎左旗| 珲春市| 山阴县| 行唐县| 来凤县| 双城市| 兴文县| 怀来县| 天峨县| 屏东市| 西华县| 陇南市| 香河县| 青阳县| 江门市| 吉木乃县| 黑河市| 南平市| 慈溪市| 合肥市| 曲阜市| 汝州市| 宜丰县| 修水县| 抚宁县| 喜德县| 庆元县| 琼结县| 西平县| 酒泉市| 苏尼特左旗|