select count(*)走二级索引比主键索引快几百倍,你敢信?

不管你信不信 反正我是信了。。

主键索引与二级索引区别

主键索引即唯一索引,表中可以确定唯一值的字段。二级索引为非聚簇索引,也就是除了主键之外的列,都可以创建为二级索引。
主键索引 通常是 PRIMARY KEY

为什么二级索引查询比主键索引快

在 InnoDB 存储引擎中count(*) 函数是先从内存中读取数据到内存缓冲区然后进行扫描获得行记录数。InnoDB 会优先走二级索引若无会走主键索引。导致耗时较长。

在没有二级索引的情况下 select count(*) 会走主键索引缓存整表数据到缓冲区。如果存在二级索引只需要读取索引页到缓冲区查询速度显著提高几百倍。

没有创建二级索引之前
在这里插入图片描述
5246979的数据量 count(*)执行了有几分钟
创建了二级索引之后
在这里插入图片描述
在这里插入图片描述
不到一秒好么,兼职不要太快!爽~

count(*)、count(1)、count(0)、count(列名)用哪个?

推荐使用count(*)

在阿里规范中:
【强制】不要使用 count(列名)或 count(常量)来替代 count( * ) count( * )是 SQL92 定义的标准统计行数的语法跟数据库无关,跟 NULL 和非 NULL 无关。 说明count(*)会统计值为 NULL 的行。而count(列名)不会统计此列为 NULL 值的行。

【强制】count(distinct col) 计算该列除 NULL 之外的不重复行数注意 count(distinct col1, col2) 如果其中一列全为 NULL那么即使另一列有不同的值也返回为 0。

【强制】当某一列的值全是 NULL时count(col)的返回结果为 0但 sum(col)的返回结果为NULL。

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值