MySQL优化总结-查询总条数
发布日期:2021-08-19 01:52:45 浏览次数:2 分类:技术文章

本文共 956 字,大约阅读时间需要 3 分钟。

1、COUNT(*)和COUNT(COL)

COUNT(*)通常是对主键进行索引扫描,而COUNT(COL)就不一定了,另外前者是统计表中的所有符合的纪录总数,而后者是计算表中所有符合的COL的纪录数。还有有区别的。

优化总结,对于MyISAM表来说:

1.任何情况下SELECT COUNT(*) FROM tablename是最优选择;

2.尽量减少SELECT COUNT(*) FROMtablename WHERE COL = 'value' 这种查询;

3.杜绝SELECT COUNT(COL) FROM tablename WHERE COL2 ='value' 的出现。

2、COUNT(*)还是COUNT(id)

根据我的理解,应该是使用COUNT(id)更加快速,因为如果我的id是一个自增的主键,那么计算它的数量显然比计算所有字段的数量需要消耗的资源少一些。但是我不止在一篇的类似指导mysql查询加速的文章中看到,都建议我们使用SELECT COUNT(*)而非直接COUNT主键,这是为什么呢?

貌似是因为用MyISAM引擎的表存储了总条数,如果没有WHERE或者WHERE恒为真(比如WHERE 1),那么COUNT(*)可以直接返回总条数。

另外,很显然COUNT(*)不是"计算所有的字段",显然MySQL会把*解析成“一条数据”的意思。

测试数据,简单对比一下,未做更深入的测试:

#0.817-一百万条的查询时间

select count(*) from student ;

#0.789-一百万条的查询时间
select 
count
(id) 
from 
student;
#1.011-一百万条的查询时间
select 
count
(
name
from 
student;
#1.162-一百万条的查询时间
SELECT 
COUNT
(*) 
FROM 
student 
WHERE 
namelike 
'%xiaoli%'
;#默认用主键索引查询,但是加上
like
条件后索引失效
 
总的来说,使用COUNT(id)还是更快一些,这里作的简单对比,供大家参考。

转载于:https://www.cnblogs.com/alexguoyihao/p/9100979.html

转载地址:https://blog.csdn.net/weixin_30911809/article/details/96871821 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:GitHub项目Storm-HBase介绍
下一篇:httpclient的get和post

发表评论

最新留言

关注你微信了!
[***.104.42.241]2024年04月15日 13时54分06秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章