mysql优化count与sum有意思的地方

问题:统计shop_goods_sku表的数据条数?

方法一:mysql count(*) from shop_goods_sku;

方法二:mysql count(1) from shop_goods_sku;

方法三:mysql count(sku_id) from shop_goods_sku;

方法四:SHOW TABLE STATUS FROM databases_name LIKE 'shop_goods_sku'; 

方法五:SELECT TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='databases_name' AND TABLE_NAME='shop_goods_sku';

方法六:mysql sku_id from shop_goods_sku order by sku_id limit 1;

1.通常在mysql数据库,单表数据低于100W条,以上方法基本没有问题,可以大致得到解决。

2.单表数据大于100W时,方法(一、二、三)将会出现性能问题,数据库的所有压力全部给到数据,非常慢;方法(四、五、六)只能得到一个预估值,并不是精准数据。

问题:出现单表大数据时该如何处理呢?

我们会发现一个问题:sum使用的时候速度快,性能问题得到很大的提升,如果配合“索引”一起使用那这个效果还可以提升。那我们想一想有没有办法把count功能使用sum去替换呢?

答案是可以实现如下demo:

答案一:select sum(a.x) from (select if(sku_id > 0,1,0) as x from shop_goods_sku) as a;

答案二:select sum(case when sku_id > 0 then 1 else 0 end)  from shop_goods_sku;

答案三:select sum(if(sku_id > 0,1,0)) from shop_goods_sku;

答案四:select sum(1) from shop_goods_sku;

各位大神还没有什么更好的办法可以实现,希望指导谢谢!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值