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

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

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

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

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

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

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

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

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

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

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

故 COUNT(1) 和 COUNT(*) 可認(rèn)為是直接查詢符合條件的數(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ù)值就可以了,當(dāng)然前提是不能有where條件

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

3.2 InnoDB 引擎優(yōu)化

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

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

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

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

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

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

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

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

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

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

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

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

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

總結(jié)

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

相關(guān)文章

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

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

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

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

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

    MySQL索引長度限制原理解析

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

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

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

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

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

    PostgreSQL USAGE和SELECT權(quán)限案例深入分析

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

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

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

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

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

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

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

    關(guān)于加強MYSQL安全的幾點建議

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

最新評論

沅江市| 登封市| 灵寿县| 揭东县| 溆浦县| 深水埗区| 昌吉市| 临朐县| 石门县| 广元市| 石泉县| 叙永县| 陆川县| 富宁县| 丰顺县| 砚山县| 习水县| 南投市| 肃宁县| 宁城县| 宣化县| 腾冲县| 高安市| 横山县| 乳山市| 建湖县| 垣曲县| 华蓥市| 博野县| 鄂州市| 射阳县| 宣汉县| 韩城市| 桐城市| 黔西| 夏河县| 双柏县| 凤台县| 佛学| 徐州市| 蚌埠市|