美文网首页
2019-08-17第十四讲:count(*)这么慢[mysql

2019-08-17第十四讲:count(*)这么慢[mysql

作者: Mr钧 | 来源:发表于2019-08-17 21:54 被阅读0次

需求: 需频繁统计总记录数.

1. count(*)实现方式

    1.MyISAM ==> 总行数 写盘 ==> 很快

    2.InnoDB ==> 从引擎中一行行读数据, 累计 ==> 很慢

    注意: 有where则MyIASM没那么快

    3. 为什么Innodb 不存起来?  ==> 支持事务 , MVCC  ==> 可见的行才能从引擎中取出来.

    4. count(*) 还是做了优化的 ==> 哪个索引树小 ,就扫描哪个

 数据库系统设计法则: 保证逻辑正确前提下, 尽量减少扫描的数据量. 

    5.show table status  ==> 是根据索引统计采样估算的, 误差40% -50% 

2.用缓存系统保存计数.

    1.使用redis ==> 可能会丢失更新 ==> 解决方案: 如果redis异常重启, 则查一遍count(*), 再放进缓存中

    2.使用redis ==> 逻辑上不精确

1.插入数据, 再加1 2. redis加1  再插入

3.在数据库保存计数 ==> 推荐使用

            1.解决崩溃丢失问题

            2.解决并发问题

4.不同的count用法

    1.count()

        what: 是一个聚合函数 ,对于返回结果集一行行的判断, 不是null就累计加1.

    2.原则: 

        1.server层要什么就给什么

        2.Innodb 只给必要的值

        3.优化器优化了count(*)的语义为"取行数"

        

    3.count(主键) :  遍历表,  取每行id, 返回server,  server判断不可能为空, 累加

        count(1) :  遍历表, 不取值, server每行放一个1,  server判断不可能为空, 累加

        count(字段): 遍历表,  取每行字段, 返回server,  server判断是否为空, 累加

        count(*): 遍历表, 不取值, 按行累加 ==> 专门优化过

    4.结论: 效率排序:    * > 1 > 主键 > 字段. 

注意: 两个不同的存储系统, 不支持分布式事务, 无法拿到精确一致的视图

相关文章

  • 2019-08-17第十四讲:count(*)这么慢[mysql

    需求: 需频繁统计总记录数. 1. count(*)实现方式 1.MyISAM ==> 总行数 写盘 ==> ...

  • MySQL count(*) 慢吗

    原文《MySQL实战45讲》 count(*)的实现方式 在MySQL中,不用的引擎对count(*)有不同的实现...

  • Mysql性能优化:为什么count(*)这么慢?

    导读 在开发中一定会用到统计一张表的行数,比如一个交易系统,老板会让你每天生成一个报表,这些统计信息少不了sql中...

  • 慢查询日志分析工具-mysqldumpslow

    mysql官方提供的慢查询日志分析工具.主要功能是, 统计不同慢sql的出现次数(Count),执行最长时间(Ti...

  • 【MySQL】count(*) count(字段) count(

    准备 创建库表 创建存储过程 生成数据 简介 count() 是MySQL内置函数,用来统计字段中非NULL的数量...

  • 14 . count

    count(*) 的实现方式 讨论的是没有过滤条件的 count(*)在不同的 MySQL 引擎中,count(*...

  • MySQL - count(*)

    count(*) 的实现方式 在没有过滤条件的 count()下,在不同的 MySQL 引擎中,count() 有...

  • MySQL count

    不同引擎count(*)实现方式不同 MyISAM引擎把一个表的总行数记录在了磁盘上,执行count(*)会直接返...

  • 【MySQL】count

    count():用来统计表中记录的一个函数,返回符合条件的行数。count(*):返回表中的记录数(包含所有列),...

  • 优化MySQL count(*)查询慢的问题

    为什么count(*)逻辑很简单但是查询起来却很慢 在开发中我们经常会遇到使用coun(*) 查询总数的需求。但是...

网友评论

      本文标题:2019-08-17第十四讲:count(*)这么慢[mysql

      本文链接:https://www.haomeiwen.com/subject/dzvksctx.html