电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

詳解 MySQL中count函數(shù)的正確使用方法

瀏覽:27日期:2023-10-09 13:20:47

1. 描述

在MySQL中,當(dāng)我們需要獲取某張表中的總行數(shù)時(shí),一般會(huì)選擇使用下面的語句

select count(*) from table;

其實(shí)count函數(shù)中除了*還可以放其他參數(shù),比如常數(shù)、主鍵id、字段,那么它們有什么區(qū)別?各自效率如何?我們應(yīng)該使用哪種方式來獲取表的行數(shù)呢?

當(dāng)搞清楚count函數(shù)的運(yùn)行原理后,相信上面幾個(gè)問題的答案就會(huì)了然于胸。

2. 表結(jié)構(gòu)

為了解決上述的問題,我創(chuàng)建了一張 user 表,它有兩個(gè)字段:主鍵id和name,后者可以為null,建表語句如下。

CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT ’主鍵’, `name` varchar(255) DEFAULT NULL COMMENT ’姓名’, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;

在該表中共有6000000條數(shù)據(jù),前1000000條數(shù)據(jù)行的name字段為空,其余數(shù)據(jù)行name=id,使用存儲(chǔ)過程造測試數(shù)據(jù)的代碼如下

-- 使用存儲(chǔ)過程造測試數(shù)據(jù)delimiter;;create procedure idata()begin declare i int; set i=1; while(i<=6000000)do insert into user values(i, i); set i=i+1; end while;end;;delimiter;call idata();-- 將前1000000條數(shù)據(jù)的name字段置為nullupdate user set name=null where id<1000000;

3. 執(zhí)行 SQL 語句及結(jié)果

為了區(qū)分count函數(shù)不同參數(shù)的區(qū)別,主要從執(zhí)行時(shí)間和掃描行數(shù)這兩方面來描述SQL的執(zhí)行效率,同時(shí)還會(huì)從返回結(jié)果來描述`count函數(shù)的特性。

*符號(hào) —— select count(*) from user; 常數(shù)—— select count(1) from user; 非空字段—— select count(id) from user; 可為空的字段—— select count(name) from user;

3.1 *符號(hào)

mysql> select count(*) from user;+----------+| count(*) |+----------+| 6000000 |+----------+1 row in set (0.76 sec)

遍歷全表,不取值(優(yōu)化后,必定不是null,不取值),累加計(jì)數(shù),最終返回結(jié)果。

3.2 常數(shù)

mysql> select count(1) from user;+----------+| count(1) |+----------+| 6000000 |+----------+1 row in set (0.76 sec)

遍歷全表,一行行取數(shù)據(jù),將每一行賦值為1,判斷到該字段不可為空,累加計(jì)數(shù),最終返回結(jié)果。

3.3 非空字段

mysql> select count(id) from user;+-----------+| count(id) |+-----------+| 6000000 |+-----------+1 row in set (0.85 sec)

遍歷全表,一行行取數(shù)據(jù)(會(huì)選擇最小的索引樹來遍歷,所以比相同情況下的count字段效率更高),取每行的主鍵id,判斷到該字段不可為空,累加計(jì)數(shù),最終返回結(jié)果。

3.4 可為空的字段

mysql> select count(name) from user;+-------------+| count(name) |+-------------+| 5900001 |+-------------+1 row in set (0.93 sec) 若字段定義不為空:遍歷全表,一行行取數(shù)據(jù),取每行的該字段,判斷到該字段不可為空,累加計(jì)數(shù),最終返回結(jié)果。 若字段定義可為空:遍歷全表,一行行取數(shù)據(jù),取每行的該字段,判斷到該字段可能是null,然后再判斷該字段的值是否為null,不為null才累加計(jì)數(shù),最終返回結(jié)果。 若該字段沒有索引,將遍歷主鍵索引樹。

4. 執(zhí)行結(jié)果分析

4.1 結(jié)果集

首先從結(jié)果集的角度來看,前三條 SQL 語句的目的是一樣的——返回的是所有行數(shù),而 count 函數(shù)的參數(shù)是普通字段且字段默認(rèn)為 null 的時(shí)候,它返回的是該字段不為 null 的行數(shù)。

4.2 執(zhí)行時(shí)間

從執(zhí)行時(shí)間上來看的話,效率大致是count(可為空的字段) < count(非空字段) < count(常數(shù)) < count(*)。

5. 總結(jié)

count是一個(gè)聚合函數(shù),對(duì)于返回的結(jié)果集,一行行地判斷,如果count函數(shù)的參數(shù)不是NULL,累計(jì)值就加1,否則不加。最后返回累計(jì)值。

count(*)速度最快的原因是它不會(huì)在計(jì)數(shù)的時(shí)候去取每行數(shù)據(jù)值 count(1)比count(*)稍慢的原因是它會(huì)取每個(gè)數(shù)據(jù)行并賦值為1 count(非空字段)比count(1)稍慢的原因是它會(huì)從每個(gè)數(shù)據(jù)行中取出主鍵 id count(可為空的字段)最慢的原因是它可能需要判斷每個(gè)數(shù)據(jù)行中的改字段是否為 null

所以,最好還是用count(*)。

以上就是詳解 MySQL中count函數(shù)的正確使用方法的詳細(xì)內(nèi)容,更多關(guān)于MySQL count函數(shù)的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: MySQL 數(shù)據(jù)庫
相關(guān)文章:
主站蜘蛛池模板: 酒糟烘干机-豆渣烘干机-薯渣烘干机-糟渣烘干设备厂家-焦作市真节能环保设备科技有限公司 | 远程会诊系统-手术示教系统【林之硕】医院远程医疗平台 | 粘弹体防腐胶带,聚丙烯防腐胶带-全民塑胶| PSI渗透压仪,TPS酸度计,美国CHAI PCR仪,渗透压仪厂家_价格,微生物快速检测仪-华泰和合(北京)商贸有限公司 | 汽车整车综合环境舱_军标砂尘_盐雾试验室试验箱-无锡苏南试验设备有限公司 | 申江储气罐厂家,储气罐批发价格,储气罐规格-上海申江压力容器有限公司(厂) | 中红外QCL激光器-其他连续-半导体连续激光器-筱晓光子 | 采暖炉_取暖炉_生物质颗粒锅炉_颗粒壁炉_厂家加盟批发_烟台蓝澳采暖设备有限公司 | 淋巴细胞分离液_口腔医疗器材-精欣华医疗器械(无锡)有限公司 | 北京征地律师,征地拆迁律师,专业拆迁律师,北京拆迁律师,征地纠纷律师,征地诉讼律师,征地拆迁补偿,拆迁律师 - 北京凯诺律师事务所 | 美缝剂_美缝剂厂家_美缝剂加盟-地老板高端瓷砖美缝剂 | 衬氟旋塞阀-卡套旋塞阀-中升阀门首页 | 轻型地埋电缆故障测试仪,频响法绕组变形测试仪,静荷式卧式拉力试验机-扬州苏电 | 大鼠骨髓内皮祖细胞-小鼠神经元-无锡欣润生物科技有限公司 | 编织人生 - 权威手工编织网站,编织爱好者学习毛衣编织的门户网站,织毛衣就上编织人生网-编织人生 | 工业雾炮机_超细雾炮_远程抑尘射雾器-世纪润德环保设备 | WF2户外三防照明配电箱-BXD8050防爆防腐配电箱-浙江沃川防爆电气有限公司 | 扬尘监测_扬尘监测系统_带证扬尘监测设备 - 郑州港迪科技有限公司 | 滚筒烘干机_转筒烘干机_滚筒干燥机_转筒干燥机_回转烘干机_回转干燥机-设备生产厂家 | 长沙印刷厂-包装印刷-画册印刷厂家-湖南省日大彩色印务有限公司 青州搬家公司电话_青州搬家公司哪家好「鸿喜」青州搬家 | 除湿机|工业除湿机|抽湿器|大型地下室车间仓库吊顶防爆除湿机|抽湿烘干房|新风除湿机|调温/降温除湿机|恒温恒湿机|加湿机-杭州川田电器有限公司 | 顺景erp系统_erp软件_erp软件系统_企业erp管理系统-广东顺景软件科技有限公司 | 客服外包专业服务商_客服外包中心_网萌科技| 三价铬_环保铬_环保电镀_东莞共盈新材料贸易有限公司 | 硫酸钡厂家_高光沉淀硫酸钡价格-河南钡丰化工有限公司 | 风电变桨伺服驱动器-风电偏航变桨系统-深圳众城卓越科技有限公司 | 坏男孩影院-提供最新电影_动漫_综艺_电视剧_迅雷免费电影最新观看 | 越南专线物流_东莞国际物流_东南亚专线物流_行通物流 | 微信聊天记录恢复_手机短信删除怎么恢复_通讯录恢复软件下载-快易数据恢复 | 中国玩具展_玩具展|幼教用品展|幼教展|幼教装备展 | 照相馆预约系统,微信公众号摄影门店系统,影楼管理软件-盟百网络 | 【中联邦】增稠剂_增稠粉_水性增稠剂_涂料增稠剂_工业增稠剂生产厂家 | 济南电缆桥架|山东桥架-济南航丰实业有限公司 | 数显水浴恒温振荡器-分液漏斗萃取振荡器-常州市凯航仪器有限公司 | 臭氧实验装置_实验室臭氧发生器-北京同林臭氧装置网 | 深圳网站建设-高端企业网站开发-定制网页设计制作公司 | 酸度计_PH计_特斯拉计-西安云仪| 深圳侦探联系方式_深圳小三调查取证公司_深圳小三分离机构 | 蜗轮丝杆升降机-螺旋升降机-丝杠升降机厂家-润驰传动 | 西门子代理商_西门子变频器总代理-翰粤百科 | 变压器配件,变压器吸湿器,武强县吉口变压器配件有限公司 |