mysql的count统计查询到底要怎么用【mysql】

一、前言

1,有人问我,count查询为啥有时候快有时候慢

2,首先要明白count查询的真正作用

2-1:统计某个列的数量

2-1:统计行数

二、原理

1,统计列时,会查询这个列不为空的数量,它是需要计算的

2,统计行数时,如果不加where,它可以直接取到结果,因为它可以利用存储引擎的特性直接获得这个值,比如count(*)

3,统计列时,如果知道这个列不能为空,会转化为count(*),从而加快速度

所以:你要知道自己要干什么,该怎么样去用

拓展:为啥慢?innodb为聚簇索引同时支持事物,其在count指令实现上采用实时统计方式。在无可用的二级索引情况下,执行count会使MySQL扫描全表数据,当数据中存在大字段或字段较多时候,其效率非常低下(每个页只能包含较少的数据条数,需要访问的物理页较多)

三、实际应用

1,50万条数据,没有索引,大约耗时13分钟

2,50万条数据,有索引,大约耗时354毫秒

3,原理

mysql一个数据页为:16k(默认)

能存16*1024/(4+8) =1365条数据(为什么是4+8可以看看mysql存储页的原理)

假设每页数据耗损不存满,50%

50万条数据,需要500000/1365*2 为 732个物理页

大小为16k*732为11.4M

mysql空间按区分配,一区1M,假设连续的话,需要连续读12个区

pc硬盘转速7200转/分= 70m/s

io寻址时间(11.4*8.5ms=96)+读取时间(11.4m/70m=162ms)= 96+162 = 258毫秒

转载于:https://my.oschina.net/songms/blog/3079694

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值