最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL數(shù)據(jù)庫統(tǒng)計函數(shù)COUNT的使用及說明

 更新時間:2024年07月18日 17:01:02   作者:談談1974  
這篇文章主要介紹了MySQL數(shù)據(jù)庫統(tǒng)計函數(shù)COUNT的使用及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

1. COUNT 函數(shù)的作用

數(shù)據(jù)庫系統(tǒng)中 COUNT(expr)用于統(tǒng)計數(shù)據(jù)行數(shù),其主要作用為返回SELECT語句檢索的行中 expr 表達式的值不為 NULL 的行的數(shù)量,返回值是一個 BIGINT 值,如果查詢結果沒有命中任何記錄則返回 0。

通常的使用方式主要有以下兩種:

  • COUNT(column) 表示統(tǒng)計對應列有值(不為空)的數(shù)據(jù)的行數(shù)
  • COUNT(*) 表示統(tǒng)計結果集的總行數(shù)

2. COUNT(*) 與 COUNT(1) 與 COUNT(column)

COUNT(expr)統(tǒng)計的是 expr 不為 NULL的行數(shù),而在COUNT(column)、 COUNT(1)COUNT(*)三種用法中,expr 分別是列名、 常量*。

這三個條件中常量是一個固定值,肯定不為NULL。

*可以理解為查詢整行,所以肯定也不為NULL,只有列名的查詢結果有可能是NULL。

故 COUNT(1) 和 COUNT(*) 可認為是直接查詢符合條件的數(shù)據(jù)庫表的行數(shù),而COUNT(column)表示的是查詢符合條件的列的值不為NULL的行數(shù)。

  • 對于COUNT(1)和COUNT(*),官方的說法是在 InnoDB 引擎中二者完全一樣,不存在快慢區(qū)別
  • COUNT(column)的查詢則比較簡單粗暴,就是進行全表掃描,然后判斷指定字段的值是不是為NULL,不為NULL則累加

相比 COUNT(*),COUNT(column) 多了一個判斷所查詢的字段是否為 NULL 的步驟,所以效率要比 COUNT(*) 低

3. MySQL 對 COUNT 的優(yōu)化

這些優(yōu)化的前提都是查詢語句中不包含 WHERE 及 GROUP BY 限定條件

3.1 MyISAM 引擎優(yōu)化

MyISAM 引擎的鎖是表級鎖,同一張表上的操作都是串行完成,故MyISAM做了一個簡單的優(yōu)化,就是把表的總行數(shù)單獨記錄下來

使用 COUNT(*) 查詢表的總行數(shù)時,直接返回這個記錄下來的數(shù)值就可以了,當然前提是不能有where條件

MyISAM之所以可以把表的總行數(shù)記錄下來供COUNT(*)查詢使用,是因為MyISAM數(shù)據(jù)庫是表級鎖,不會有并發(fā)的數(shù)據(jù)庫行數(shù)修改,所以查詢得到的行數(shù)是準確的

3.2 InnoDB 引擎優(yōu)化

因為 InnoDB 支持事務,其中大部分操作都是行級鎖,所以表的行數(shù)可能會被并發(fā)修改,在這種情況下將總行數(shù)記錄下來的方式就不準確了。

因此 InnoDB 中使用 COUNT( * ) 查詢行數(shù)的時候,不可避免地要進行掃表,只能在掃表過程中來優(yōu)化效率

我們知道,InnoDB 中索引分為聚簇索引(主鍵索引)和非聚簇索引(非主鍵索引),聚簇索引的葉子節(jié)點中保存的是整行記錄,而非聚簇索引的葉子節(jié)點中保存的是該行記錄的主鍵的值。

COUNT(*)只是為了統(tǒng)計總行數(shù),不用關心查到的具體值,如果在掃表的過程中選擇一個成本較低的索引的話,那就可以大大節(jié)省時間。

顯而易見,非聚簇索引要比聚簇索引小很多,所以 InnoDB 引擎會優(yōu)先選擇最小的非聚簇索引來掃表。

根據(jù)這個特性可知,建表的時候除了主鍵索引以外,創(chuàng)建一個非主鍵索引也很有必要

4. COUNT 查詢優(yōu)化

假設有一張表t_user,里面有大概5000條記錄,一個需求是統(tǒng)計 id 大于 20 的用戶數(shù)量,以下兩種寫法效率大不相同

簡單的條件查找,近乎掃描全表,表較小時效率很高,表數(shù)據(jù)較多就很耗時

SELECT
    count( * ) 
FROM
    t_user
WHERE
    id > 20;

另一個思路是先統(tǒng)計 id 小于 20 的記錄,再使用總的行數(shù)減去該值就得到了結果。

這是因為查詢優(yōu)化階段會把該類子查詢當作常數(shù)處理,只需掃描 id < 20 的行,開銷大幅減少

SELECT
    ( SELECT COUNT( * ) FROM t_user ) - count( * ) 
FROM
    t_user 
WHERE
    id < 20;

總結

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Mysql數(shù)據(jù)庫之sql基本語句小結

    Mysql數(shù)據(jù)庫之sql基本語句小結

    這篇文章主要介紹了Mysql數(shù)據(jù)庫之sql基本語句,結合實例形式總結分析了MySQL數(shù)據(jù)庫連接、登錄、查看以及數(shù)據(jù)庫、數(shù)據(jù)表等常見操作技巧,需要的朋友可以參考下
    2019-11-11
  • MySQL去重中distinct和group?by的區(qū)別淺析

    MySQL去重中distinct和group?by的區(qū)別淺析

    今天無意中聽到有同事在討論,distinct和group by有什么區(qū)別,下面這篇文章主要給大家介紹了關于MySQL去重中distinct和group?by區(qū)別的相關資料,需要的朋友可以參考下
    2022-11-11
  • MySQL索引長度限制原理解析

    MySQL索引長度限制原理解析

    這篇文章主要介紹了MySQL索引長度限制原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-12-12
  • 如何修改MYSQL5.7.17數(shù)據(jù)庫存儲文件的路徑

    如何修改MYSQL5.7.17數(shù)據(jù)庫存儲文件的路徑

    在搭建華為云服務器的時候遇到點問題,查看了網(wǎng)上好多的帖子都沒能解決,不知道有沒有跟我遇到一樣問題的老鐵,我就把我的解決辦法分享給大家,希望能夠幫助各位老鐵
    2023-05-05
  • MySQL 5.6 如何更改安全的處理密碼探討

    MySQL 5.6 如何更改安全的處理密碼探討

    MySQL 5.6將會自動的在日志中隱藏密碼信息,接下來為你詳細介紹下MySQL 5.6 如何更安全的處理密碼,感興趣的你可以參考下哈,希望可以幫助到你
    2013-03-03
  • PostgreSQL USAGE和SELECT權限案例深入分析

    PostgreSQL USAGE和SELECT權限案例深入分析

    這篇文章主要介紹了PostgreSQL USAGE和SELECT權限案例深入分析,因為項目需求,需要學習PostgreSQL,本人之前學習過MYSQL,臨時快速上手,盡快的去學習項目需要PostgREST
    2023-04-04
  • mysql連接查詢、聯(lián)合查詢、子查詢原理與用法實例詳解

    mysql連接查詢、聯(lián)合查詢、子查詢原理與用法實例詳解

    這篇文章主要介紹了mysql連接查詢、聯(lián)合查詢、子查詢原理與用法,結合實例形式詳細分析了mysql連接查詢、聯(lián)合查詢、子查詢的基本概念、功能、原理、用法及操作注意事項,需要的朋友可以參考下
    2020-04-04
  • MySQL中使用ProxySql實現(xiàn)讀寫分離

    MySQL中使用ProxySql實現(xiàn)讀寫分離

    ProxySQL是一款高性能、開源的MySQL數(shù)據(jù)庫中間件,通過安裝ProxySQL并配置主從服務器、用戶及路由規(guī)則,實現(xiàn)MySQL讀寫分離,提升負載均衡與高可用性,本文給大家介紹MySQL中使用ProxySql實現(xiàn)讀寫分離,感興趣的朋友一起看看吧
    2025-08-08
  • 啟動與登錄Mysql實現(xiàn)方式

    啟動與登錄Mysql實現(xiàn)方式

    本文詳細介紹了MySQL服務的啟動與停止方法,包括命令行和圖形工具操作,涵蓋登錄退出、數(shù)據(jù)庫查看及版本信息查詢等步驟,適用于Windows系統(tǒng)管理員和開發(fā)者
    2025-08-08
  • 關于加強MYSQL安全的幾點建議

    關于加強MYSQL安全的幾點建議

    現(xiàn)在php+mysql組合越來越多,這里腳本之家小編就為大家分享一下mysql的安裝設置的幾個小技巧
    2016-04-04

最新評論

介休市| 托里县| 诸暨市| 香港| 丰原市| 西峡县| 融水| 松溪县| 冷水江市| 临澧县| 奇台县| 定西市| 邵东县| 自治县| 九江市| 吉安市| 阳高县| 屏东市| 衡阳市| 石林| 广宁县| 潼南县| 英山县| 桃源县| 河西区| 宁陵县| 庄浪县| 阜新市| 新野县| 庆城县| 左云县| 莲花县| 陕西省| 望奎县| 吉木萨尔县| 商洛市| 永丰县| 南漳县| 靖宇县| 胶州市| 茂名市|