mysql innobd 下count(*) count(1) count(id) 执行情况

首先说明

是在 mysql innodb 下比较

count(*) count(1) count(id) 三种类型的区别

创建表 

CREATE TABLE `t_user` (

  `id` bigint(20) NOT NULL AUTO_INCREMENT,

  `name` varchar(255) DEFAULT NULL,

  `age` tinyint(4) DEFAULT NULL,

  `create_time` datetime DEFAULT NULL,

  `update_time` datetime DEFAULT NULL,

  `testchar` varchar(100) DEFAULT NULL COMMENT '102102301230120300213010230102312301203012301230',

  PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=665396 DEFAULT CHARSET=utf8





CREATE TABLE `t_user_2` (

  `id` bigint(20) NOT NULL AUTO_INCREMENT,

  `id_2` bigint(20) NOT NULL DEFAULT '1',

  `name` varchar(255) DEFAULT NULL,

  `age` tinyint(4) DEFAULT NULL,

  `create_time` datetime DEFAULT NULL,

  `update_time` datetime DEFAULT NULL,

  `testchar` varchar(100) DEFAULT NULL COMMENT '102102301230120300213010230102312301203012301230',

  PRIMARY KEY (`id`),

  KEY `idx_2` (`id_2`),

) ENGINE=InnoDB AUTO_INCREMENT=690409 DEFAULT CHARSET=utf8

1表对比 2表 只是多了 一个id_2 字段和索引 

写入 60w数据后

看下 count(*) count(1) count(id) 执行情况

在 t_user  表执行 

在 t_user_2  表执行

再两个表中的执行计划中 可以看到 count(*) count(1) count(id) 效果是一样的 

唯一不同的是 mysql innodb 会优化查询 优先找二级索引去查 数据 表里没有二级索引 那就走主键索引 

为什么会有这样优化呢?

主键索引 和 二级索引的区别在于 叶子节点有没有数据

主键索引有数据 所以每个 page 页 存储的数据就少 那么 就需要更多的IO

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值