当前位置: 首页 > news >正文

深圳网站建设制作品牌公司安徽蚌埠怀远县建设局网站

深圳网站建设制作品牌公司,安徽蚌埠怀远县建设局网站,行业网站制作,互联网站开发管理文档文章目录 count函数的语义count(主键)count(1)count(*)count(字段)替代方案explain或者show table status中间表或者其他数据库计数 以下分析都是基于 select count(?) from table 这个语句来分析,不带过滤条件。 count函数的语义 count() 是一个聚合函数&#x…

文章目录

  • count函数的语义
  • count(主键)
  • count(1)
  • count(*)
  • count(字段)
  • 替代方案
    • explain或者show table status
    • 中间表或者其他数据库计数

以下分析都是基于 select count(?) from table 这个语句来分析,不带过滤条件。

count函数的语义

count() 是一个聚合函数,函数的参数不仅可以是字段名,也可以是其他任意表达式,该函数作用是统计符合查询条件的记录中,函数指定的参数不为 NULL 的记录有多少个。

在通过 count 函数统计有多少个记录时,MySQL 的 server 层会维护一个名叫 count 的变量。

server 层会循环向 InnoDB 读取一条记录,如果 count 函数指定的参数不为 NULL,那么就会将变量 count 加 1,直到符合查询的全部记录被读完,就退出循环。最后将 count 变量的值发送给客户端。

count(主键)

在通过 count 函数统计有多少个记录时,MySQL 的 server 层会维护一个名叫 count 的变量。

server 层会循环向 InnoDB 读取一条记录,如果 count 函数指定的参数不为 NULL,那么就会将变量 count 加 1,直到符合查询的全部记录被读完,就退出循环。最后将 count 变量的值发送给客户端。

如果表里只有主键索引,没有二级索引时
那么,InnoDB 循环遍历聚簇索引,将读取到的记录返回给 server 层,然后读取记录中的 id 值,根据 id 值判断是否为 NULL,如果不为 NULL,就将 count 变量加 1。

如果表里有二级索引时
InnoDB 循环遍历的对象就不是聚簇索引,而是二级索引。

这是因为相同数量的二级索引记录可以比聚簇索引记录占用更少的存储空间,所以二级索引树比聚簇索引树小,这样遍历二级索引的 I/O 成本比遍历聚簇索引的 I/O 成本小,因此「优化器」优先选择的是二级索引。

count(1)

如果表里只有主键索引,没有二级索引时
InnoDB 循环遍历聚簇索引(主键索引),将读取到的记录返回给 server 层,但是不会读取记录中的任何字段的值,因为 count 函数的参数是 1,不是字段,所以不需要读取记录中的字段值。参数 1 很明显并不是 NULL,因此 server 层每从 InnoDB 读取到一条记录,就将 count 变量加 1。

可以看到,count(1) 相比 count(主键字段) 少一个步骤,就是不需要读取记录中的字段值,所以通常会说 count(1) 执行效率会比 count(主键字段) 高一点。

*** 如果表里有二级索引时***
InnoDB 循环遍历的对象就二级索引。

count(*)

当你使用 count() 时,MySQL 会将 * 参数转化为参数 0 来处理,也就是说 count() 其实等于 count(0)。

所以,count(*) 执行过程跟 count(1) 执行过程基本一样的,性能没有什么差异。

而且 MySQL 会对 count(*) 和 count(1) 有个优化,如果有多个二级索引的时候,优化器会使用key_len 最小的二级索引进行扫描。

只有当没有二级索引的时候,才会采用主键索引来进行统计。

count(字段)

count(字段) 的执行效率相比前面的 count(1)、 count(*)、 count(主键字段) 执行效率是最差的。主要原因是因为它是个全表扫描操作。

替代方案

explain或者show table status

如果对于count值不是要求很精确可以通过执行 explain或者show table status来获取值

中间表或者其他数据库计数

如果要求比较精确可以在写数据后通过中间表或者其他数据库去记录当前数量。

http://www.yayakq.cn/news/934221/

相关文章:

  • 广告设计与制作自我评价连云港网站关键字优化如何
  • 国外h5制作网站免费微信分销系统
  • 江西昌宇建设工程公司网站浦东网站建设箱海运
  • 长沙网站seo优化排名wordpress首页显示链接
  • 网站分析案例邵阳seo排名
  • 洛阳做多屏合一网站网络推广技巧与方法
  • 三明网站建设策划公司组织结构图
  • 上海市工程建设监理协会网站开发公司 网站建设
  • 建设局网站自查自纠山西建设工程集团有限公司
  • 南通通州住房和城乡建设网站好学校平台网站模板下载
  • 网站配置服务Wordpressphp模板源码
  • 如何做简易个人网站自己做网站 空间怎么买
  • 微网站方案怎么写wordpress ftp配置
  • 公司网站代码模板下载如何去除wordpress主题信息
  • 怎么做试玩平台推广网站网站建设氵金手指下拉十二
  • 楚州网站开发界面设计常用软件
  • 旅游类网站模板做经营网站怎么赚钱吗
  • 唐山公司网站建设 中企动力唐山网站备案是否收费标准
  • 寿光 网站建设国内永久crm
  • 中国互联网企业100强榜单seo短视频网页入口引流网
  • 二级域名网站有哪些播州区住房城乡建设路的网站
  • 怎么做网站鹅蛋生蚝wordpress 移动建站
  • 如何建设电影会员网站聊城网站建设哪家专业
  • 苏州网站外包网站网站程序架设
  • 做平台还要做网站吗优质院校 建设网站
  • 茂名一站式网站建设报价取个网络公司名字
  • 个人网站的名称wordpress支持的语言
  • 网站建设外包注意什么买空间送网站模板
  • 长春最专业的网站建设网站开发税收标准
  • 网站制作公司-山而网页设计代码看不到图片怎么办