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

溫馨提示×

溫馨提示×

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

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

MySQL中count(字段) 、count(主鍵 id) 、count(1)和count(*)的區別有哪些

發布時間:2021-12-03 15:18:53 來源:億速云 閱讀:320 作者:小新 欄目:大數據

這篇文章主要介紹MySQL中count(字段) 、count(主鍵 id) 、count(1)和count(*)的區別有哪些,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

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

所以,count(*)、count(1)和count(主鍵 id) 都表示返回滿足條件的結果集的總行數;而 count(字段),則表示返回滿足條件的數據行里面,參數“字段”不為 NULL 的總個數。

至于分析性能差別的時候,記住這么幾個原則:

  • server 層要什么就給什么;

  • InnoDB 只給必要的值;

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

count(可空字段)

掃描全表,讀到server層,判斷字段可空,拿出該字段所有值,判斷每一個值是否為空,不為空則累加

count(非空字段)與count(主鍵 id)

掃描全表,讀到server層,判斷字段不可空,按行累加。

count(1)

掃描全表,但不取值,server層收到的每一行都是1,判斷不可能是null,按值累加。

注意:count(1)執行速度比count(主鍵 id)快的原因:從引擎返回 id 會涉及到解析數據行,以及拷貝字段值的操作。

count(*)

MySQL 執行count(*)在優化器做了專門優化。因為count(*)返回的行一定不是空。掃描全表,但是不取值,按行累加。

看到這里,你會說優化器就不能自己判斷一下嗎,主鍵 id 肯定是非空的,為什么不能按照 count(*) 來處理,多么簡單的優化。當然 MySQL 專門針對這個語句進行優化也不是不可以。但是這種需要專門優化的情況太多了,而且 MySQL 已經優化過 count(*) 了,你直接使用這種語句就可以了。

性能對比結論

count(可空字段) < count(非空字段) = count(主鍵 id) < count(1) ≈ count(*)

以上是“MySQL中count(字段) 、count(主鍵 id) 、count(1)和count(*)的區別有哪些”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

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

AI

南和县| 资兴市| 沙坪坝区| 满城县| 石嘴山市| 明星| 体育| 青海省| 巴中市| 临安市| 肥乡县| 灵川县| 杭锦后旗| 城市| 新野县| 墨竹工卡县| 宜昌市| 石棉县| 怀仁县| 鄱阳县| 库尔勒市| 平阴县| 三亚市| 邓州市| 平乐县| 屏东县| 金秀| 临洮县| 西丰县| 烟台市| 龙里县| 大荔县| 镇坪县| 萨迦县| 平罗县| 乌恰县| 巫溪县| 泌阳县| 苍南县| 太仓市| 维西|