范文健康探索娱乐情感热点
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

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命令:show table status like "user";
  真实的总行数有100万行,预估有99万多行,误差在可接受的范围内。
  部分场景适用,比如粗略估计网站的总用户数。4. 四种计数方式的性能差别
  常见的统计总行数的方式有以下四种:
  count(*) 、 count(常量) 、 count(id) 、 count(字段)
  InnoDB引擎对count计数做了优化,会选用数据量较小的非聚簇索引进行统计。
  比如用户表中有三个索引,分别是主键索引、name索引和age索引,使用执行计划查看计数的时候用到了哪个索引?CREATE TABLE `user` (   `id` int NOT NULL AUTO_INCREMENT COMMENT "主键",   `name` varchar(100) DEFAULT NULL COMMENT "姓名",   `age` tinyint NOT NULL,   PRIMARY KEY (`id`),   KEY `idx_name` (`name`),   KEY `idx_age` (`age`) ) ENGINE=InnoDB COMMENT="用户表";explain select count(*) from user;
  用到了数据量较小的age索引。
  count(*) 、 count(常量) 是直接统计表中的总行数,效率较高。
  而 count(id) 还需要把数据返回给MySQL Server端进行累加计数。
  最后 count(字段)需要筛选不为null字段,效率最差。
  四种计数的查询性能从高到低,依次是:
  count(*) ≈ count(常量) > count(id) > count(字段)
  对于大多数情况,得到计数结果,还是老老实实使用count(*)
  所以推荐使用select count(*) ,别跟select * 搞混了,不推荐使用select * 的。

街道的社工,没有编制的那种,有发展前途吗?给你说下我几个朋友的情况我身边熟悉的朋友,凡是拿不到编制,基本上在工作岗位坚持不到2年就离职。有的是在银行里做,有的是事业单位做,也有的是社工。因为他们觉得不是编制员工,总觉得不安马上就高三了,但是我连初中的英语都看不懂,语法什么的完全不知道,现在想学了要怎么学?如果你连初中英语都看不懂你是怎么考上高中的。幸好,你还有时间补救。给你如下建议1。买一本高考要求的3500个左右单词词汇数。2。买一本新概念二看,网上有视频教学。3。买一套高考真题河南警察学院与铁道警察学院哪个更好并更好就业?河南警察学院与铁道警察学院都是政法类公办本科院校,都位居省会郑州。不同的是河南警察学院经教育部省政府批准设立的一所普通高等学校,是全国公安系统A等学校铁道警察学院是由公安部与中国铁辽宁师范大学海华学院是一所怎样的大学?凡是大学后面有什么什么学院肯定独立学院,这类学校多的去了,天津师范大学津沽学院,上海师范大学天华学院,扬州大学广陵学院等等,总之都是议价教育,学费及各种费用都很贵。谢邀!仅代表个人教师职称评聘教龄一年0。6分,班主任一年0。3分,这样合理吗?我是aft秀,我来回答这个问题。用两句话概括,第一,存在即合理。第二,存在不合理就要改革。首先说第一存在即合理,因为不知道你们学校的实际情况,不知道你们是不是寄宿制学校,班主任的工孩子上一年级,汉字写得一塌糊涂,该怎么办?一年级的孩子,才刚刚练习写字,字写的不端正一般都是姿势不端正导致的。1。写字姿势不端正。有的孩子写字的时候头低得很低,有的身体歪着,还有头枕在桌子上写字身不正,肩不平,写出来的字自公务员和事业单位最大的区别是什么?公务员和事业单位最大的区别,形象的比喻就是嫡长子和庶子的关系。嫡长子可以得到很多优待,而庶子只有捡剩下的。言归正传,体制内有两种编制,公务员使用行政编制,事业单位使用事业编制,行政我们单位有三个领导,一个正职两个副职,最近三个领导关系水深火热,我该怎么避开?我们单位也是三个领导,一个正职两个副职,这好像是一种规律吧!以前的正领导被调走了,原以为会从两个副局长中选择一个,谁知从上面空降了一个,真的是大出所料。新调来的正领导,或者说正局长戴建业讲解古诗为什么能够成为网红?怎样教授古诗词比较好?讲古诗就想说单口相声,戴建业教授的授课方式很适合古诗爱好者我曾经看过一些戴建业教授讲古诗的视频,有几点感受与朋友们分享一,生活化戴教授讲古诗,总能够与生活联系起来,甚至是与自己的生国家对于4050人员的社保补贴怎么领取?感谢邀请,更感谢楼主的提问。楼主您好。4050人员社保补贴领取,实际上是相对来说比较简便的,一般是不需要自行去领取的,只需要你符合条件,然后他会打到相应的银行卡当中。主要在于申请过去非洲工作一年的人回来会有什么变化,年薪十多万值得吗?这个问题,我来回答。我在非洲将近十年了,应该有发言权。从网上看到,有人为几千块钱杀人甚至自杀。多数老百姓为几十万块钱作难,甚至有人说,百分之九十以上的老百姓家里没有几十万存款,阶级