MySQLselectcount()计数很慢,有没有优化方案
在日常开发工作中,我经常会遇到需要统计总数的场景,比如:统计订单总数、统计用户总数等。一般我们会使用MySQL的count函数进行统计,但是随着数据量逐渐增大,统计耗时也越来越长,最后竟然出现慢查询的情况,这究竟是什么原因呢?本篇文章带你一下学习一下。1。MyISAM存储引擎计数为什么这么快?
我们总有个错觉,就是感觉MyISAM引擎的count计数要比InnoDB引擎更快,实际这不是错觉。
MyISAM引擎把表的总行数单独记录在磁盘上,查询的时候可以直接返回,不需要再累加统计。
但是当SQL查询中有where条件的时候,就无法再使用表的总行数了,还是需要乖乖的进行累加统计,查询性能也就跟InnoDB相差无几了。
为什么MyISAM引擎能够记录表的总行数,InnoDB引擎却不行?
因为MyISAM引擎不支持事务,只有表锁,所以记录的总行数是准确的。
而InnoDB引擎支持事务和行锁,存在并发修改的情况。又由于事务的隔离性,会出现不可重复读和幻读,记录的总行数无法保证是准确的。2。能不能手动实现统计总行数
既然InnoDB引擎没有帮我们记录总行数,我们能不能手动记录总行数,比如使用Redis。
其实也是不行的,使用Redis记录总行数,至少有下面3个问题:无法实现事务之间的隔离更新丢失,因为i不是原子操作,当然可以使用Lua脚本实现原子操作,更复杂。Redis是非关系型缓存数据库,不能当作关系型持久化数据库使用,一般需要设置过期时间。
由上图中得知,虽然Redis计数加1操作放在了事务里面,但是不受事务控制的,在事务没有提交前,其他查询依然读到了最新的总行数,这就是脏读的情况。3。InnoDB引擎能否实现快速计数
有一种办法,可以粗略估计表的总行数,就是使用MySQL命令:showtablestatuslikeuser;
真实的总行数有100万行,预估有99万多行,误差在可接受的范围内。
部分场景适用,比如粗略估计网站的总用户数。4。四种计数方式的性能差别
常见的统计总行数的方式有以下四种:
count()、count(常量)、count(id)、count(字段)
InnoDB引擎对count计数做了优化,会选用数据量较小的非聚簇索引进行统计。
比如用户表中有三个索引,分别是主键索引、name索引和age索引,使用执行计划查看计数的时候用到了哪个索引?CREATETABLEuser(idintNOTNULLAUTOINCREMENTCOMMENT主键,namevarchar(100)DEFAULTNULLCOMMENT姓名,agetinyintNOTNULL,PRIMARYKEY(id),KEYidxname(name),KEYidxage(age))ENGINEInnoDBCOMMENT用户表;explainselectcount()fromuser;
用到了数据量较小的age索引。
count()、count(常量)是直接统计表中的总行数,效率较高。
而count(id)还需要把数据返回给MySQLServer端进行累加计数。
最后count(字段)需要筛选不为null字段,效率最差。
四种计数的查询性能从高到低,依次是:
count()count(常量)count(id)count(字段)
对于大多数情况,得到计数结果,还是老老实实使用count()
所以推荐使用selectcount(),别跟select搞混了,不推荐使用select的。
花海双号打进巅峰榜前十,妖刀稳坐榜首,君诏成最高分对抗路KPL秋季赛已经全部结束,目前挑战者杯的正赛还没有开启,很多职业选手都在这短暂的休赛期内选择直播补时长,打巅峰赛和排位赛保持手感。虽然巅峰赛战绩并不能代表选手的综合实力,但也能……
最亮的恒星,你知道是哪颗吗?能找到它吗?傍晚,暮色降临,群星闪耀。星空里最亮的恒星,你知道是哪颗吗?冬季夜晚,南面星空里,有三颗很容易看到的璀璨恒星,三星连线,为等边三角形。称为冬季大三角。这三颗星……
今日谷雨雨生百谷,最美陵州四月天!谷雨春光晓,山川黛色青叶间鸣戴胜,泽水长浮萍今天,我们迎来了二十四节气的第六个节气谷雨谷雨蕴含雨生百谷之意谷雨是反映降水现象的节气……
2022年6月23日今日鸡蛋价格今天北方掉价区域增加,走货也正常,南方粉蛋连续几天走货都偏好,受北方影响,稳定偏多,部分小涨,两头码数缺货,中间有货也不愁买,情绪好转。在南方走货偏强的情况下,东莞昨天抄……
好心态,是治愈一切的良药好心态,是治愈一切的良药。俗话说良药苦口利于病也是这个道理,养好你的心态,比任何养生都有用。人生就是一个不断努力的过程。如果上天没给你想要的,不代表努力没意义,只是……
生活小确幸栀子花开时清香醉游人四季生态园内栀子花已开。栀子花最大的特点在于花香,无论是种植于公园中还是摆放在室内,其悠悠清香会弥漫每个角落。在美化室外室内空间的同时,又充满诗意与美感。栀子为灌木,嫩枝……
聪明投资者的3大特质,快来看看你拥有吗?每个人在开始投资后,都希望自己要么能买到市场上的牛基牛股,搭上高速列车一路躺赢;要么能准确预判市场走势,卖在最高点,买在最低点。但在实际操作中,基民们往往容易在追涨时信心……
智能锁跌破千元背后数千家企业混战,价格屠夫小米击穿底价智能锁跌破了1000元自从家里的锁6月中旬变得不好使后,90后白领高敏就琢磨着要换一把智能锁,以后再也不怕忘记带钥匙了。在高敏的印象里,一把智能锁得需要三四千元,之……
贝弗利喊话联盟明年给我安排一场圣诞大战!我发现他又换女友了本年度的圣诞大战如期举行,这一天联盟安排了5场比赛,分别是老鹰VS尼克斯、凯尔特人VS雄鹿、勇士vs太阳、篮网vs湖人、独行侠vs爵士。熟悉NBA的老炮应该知道圣诞大战就……
吕德华激情OB,助力神鸡营完虐剑仙听安,总决赛与韩涵队伍碰撞12月25日,王者荣耀KPL秋季赛总决赛正式开战。很多网友都非常期待这次的比赛,武汉eStarPro与广州TTG对战,最终E星以绝对优势拿到了冠军。而为了这场总决赛,虎牙推出的……
更换新手机在头条看世界昨天就说在换手机,现在换一个手机真的是太恼火了。因为现在手机里面的东西真的是太多了,很多APP,很多的账号需要去登录更换。手机里面的东西太多了,长……
38岁贾玲靠有趣的灵魂,活出了漂亮的人生,肥胖界的开心果38岁贾玲身材臃肿圆滚滚,她的脸已经圆到不能再圆,下巴的肉也堆积在一起逐渐变成了三层,现在基本已经看不到脖子了。肚子凸出来,两条腿也胖成了萝卜腿,就是这膀大腰圆的体型,却一直备……