亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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與navicat建立連接出現(xiàn)1251錯誤

    解決mysql與navicat建立連接出現(xiàn)1251錯誤

    在本篇文章里小編給大家整理了一篇關(guān)于mysql與navicat建立連接出現(xiàn)1251錯誤怎么解決的技術(shù)文章,需要的朋友們參考下。
    2019-08-08
  • MySQL 4.1/5.0/5.1/5.5/5.6各版本的主要區(qū)別整理

    MySQL 4.1/5.0/5.1/5.5/5.6各版本的主要區(qū)別整理

    這篇文章主要介紹了MySQL 4.1/5.0/5.1/5.5/5.6各版本的主要區(qū)別整理,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-08-08
  • mysql根據(jù)拼音字母查詢(簡單易懂的字段拼音查詢)

    mysql根據(jù)拼音字母查詢(簡單易懂的字段拼音查詢)

    MySQL在開發(fā)中,我們經(jīng)常需要根據(jù)字段拼音查詢數(shù)據(jù)庫中的數(shù)據(jù),它支持多種查詢方式,包括根據(jù)拼音字母查詢,使用 Collation 可以方便地進行簡單的拼音查詢,而使用拼音索引可以大幅提高查詢性能,根據(jù)具體的需求和情況,我們可以選擇合適的方法來實現(xiàn)拼音查詢
    2023-10-10
  • Centos7下安裝和配置MySQL5.7.20的詳細(xì)教程

    Centos7下安裝和配置MySQL5.7.20的詳細(xì)教程

    這篇文章主要介紹了Linux(CentOS7)下安裝和配置MySQL5.7.20詳細(xì)教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價,需要的朋友可以參考下
    2020-05-05
  • MySql索引的作用以及對索引的理解

    MySql索引的作用以及對索引的理解

    這篇文章主要給大家介紹了關(guān)于MySql索引的作用以及對索引的理解,MySQL索引的建立對于MySQL的高效運行是很重要的,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06
  • MySQL動態(tài)創(chuàng)建表,數(shù)據(jù)分表的存儲過程

    MySQL動態(tài)創(chuàng)建表,數(shù)據(jù)分表的存儲過程

    MySQL動態(tài)創(chuàng)建表,數(shù)據(jù)分表的存儲過程,需要的朋友可以參考下。
    2011-08-08
  • Mysql systemctl start mysqld報錯的問題解決

    Mysql systemctl start mysqld報錯的問題解決

    最近運行Mysql發(fā)現(xiàn)報錯,本文就來介紹一下Mysql systemctl start mysqld報錯的問題解決,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-06-06
  • MySQL查看和修改字符編碼的實現(xiàn)方法

    MySQL查看和修改字符編碼的實現(xiàn)方法

    下面小編就為大家?guī)硪黄狹ySQL查看和修改字符編碼的實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-11-11
  • mysql存儲過程原理與使用方法詳解

    mysql存儲過程原理與使用方法詳解

    這篇文章主要介紹了mysql存儲過程原理與使用方法,結(jié)合實例形式詳細(xì)分析了mysql存儲過程的優(yōu)缺點、定義、調(diào)用方法及相關(guān)操作注意事項,需要的朋友可以參考下
    2019-12-12
  • Mysql8報錯this is incompatible with sql_mode=only_full_group_by問題

    Mysql8報錯this is incompatible with sql_mo

    這篇文章主要介紹了Mysql8報錯this is incompatible with sql_mode=only_full_group_by問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01

最新評論