站長資訊網
        最全最豐富的資訊網站

        MySQL關于Count函數的用法區別總結

        前言

        大家好,MySQL關于Count你知道多少

        統計數據的需求在我們日常開發中是非常容易遇到了,MySQL也支持多種的計算的函數,

        接下來我們來看一看他們之間有什么區別,以及他們是否存在一些坑。【推薦學習:MySQL視頻教程】

        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(*) 會遍歷全表,雖然結果準確,但會導致性能問題。

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 精品欧美一区二区三区久久久| 老司机精品影院91| 精品无码久久久久久国产 | 国产精品久久久久久影院| 亚洲AV无码乱码精品国产 | 男女男精品视频网站在线观看| 欧美激情精品久久久久| 久久精品无码一区二区无码| 免费国产在线精品一区| 87国产私拍福利精品视频| 国产办公室秘书无码精品99| 亚洲精品无码午夜福利中文字幕| 国内精品久久久久久麻豆 | 亚洲国产成人精品无码久久久久久综合 | 精品国偷自产在线| 自拍中文精品无码| 日韩精品一区二区三区不卡| 国产免费伦精品一区二区三区| 中文字幕亚洲综合精品一区| 精品久久人人妻人人做精品| 亚洲日韩精品A∨片无码| 成人国产精品高清在线观看| 久久精品aⅴ无码中文字字幕不卡| 亚洲精品视频免费观看| 热RE99久久精品国产66热| 国内精品视频九九九九| 国产精品玖玖美女张开腿让男人桶爽免费看 | 国产亚洲精品看片在线观看 | 国产精品视频网站你懂得| 精品久久久久久中文字幕人妻最新| 无码日韩精品一区二区免费暖暖| 亚洲人午夜射精精品日韩| 亚洲第一区精品日韩在线播放| 久久精品国产99久久香蕉| 国产这里有精品| 精品亚洲欧美无人区乱码| 久久91精品综合国产首页| 欧美日韩精品一区二区视频| 亚洲精品无码专区2| 午夜三级国产精品理论三级 | 久久永久免费人妻精品下载|