首页
学习
活动
专区
圈层
工具
发布

Mysql获取数据的总行数count(*)很慢

日常开发中,获取数据的总数是很常见的业务场景,但是我们发现随着数据的增长count(*)越来越慢,这个是为什么呢, count(*)的实现方式 我们要明确不同的存储引擎,他的实现方式不一样 MyiSAM...count(*),如果加了where条件的话,MyiSAM返回也不能返回的很快 由于我们现在如果使用mysql,大多使用的存储引擎都是innodb,因此由于他是一行行的累计计数,因此随着数据的越来越多...(*)请求来说,innoDB只好把数据一行行的读出判断,可见的行才能后用于累加, 当然mysql也是对count(*)是有进行优化的,我们知道我们的索引是一棵树,而主键索引叶子节点是数据,而普通索引叶子节点是主键索引...,所以主键索引比普通索引的树大些,因此mysql优化器会拿到索引树小的,进行遍历计算,在保证逻辑正确的前提下,尽量减少扫描的数据量,是数据库优化的通用手段之一 此时你可能还依稀记得下面命令可以获取行的数量...比如有个页面要显示近期操作的100条记录和总操作数,这页面的逻辑就是到redis获取总数,再到数据库获取100条记录,如下两种会发生数据不一致的情况 查询到100结果里面有最新插入的数据,而redis

6.6K20

MySQL 的 count(*) 的优化,获取千万级数据表的总行数

找了很多优化方案,最后另辟蹊径,选择了用explain来获取总行数。 二、关于count的优化 网上关于count()优化的有很多。...MySQL中聚合函数count的使用和性能优化 (https://blog.csdn.net/lmy86263/article/details/73681633) mysql count(*) 会选哪个索引...三、使用explain获取行数 1、关于explain 关于explain,使用mysql的都知道,这个函数是专门用于查看sql语句的执行效率的,网上可供参考的文章很多。...我们使用explain之后,会看到返回很多参数,其中: rows:显示MySQL认为它执行查询时必须检查的行数。就是这个东西了,既然我们要获取的是数据表的行数,那么可以使用: ?...这样我们就能通过这个数组获取到我们需求的rows。 ? 这里直接获取这个值即可。速度极快。原来查询速度是2.33s,换成只用explain之后,速度仅为0008s,提升十分巨大。

4.3K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    如何获取mysql帮助信息

    在开发或测试环境在碰到mysql相关故障时,大多数朋友可能会通过论坛发帖,QQ群讨论方式来获取帮助。该方式是获取帮助的有效途径之一。...然而如果在生产环境,在没有网络的环境下,这些方式就无助于问题的解决。无论何种数据库,从官方网站获取帮助是最直接最有效的方式。...其次没有网络的环境下,我们可以通过MySQL客户端工具自带的帮助信息来解决问题。 1)MySQL官方手册     和Oracle官方文档一下,MySQL官方手册是获取MySQL帮助最直接最效的方式。...下载位置:http://dev.mysql.com/doc/ 2)MySQL客户端工具自带的帮助 获取mysql有关的帮助信息,直接在mysql提示符下输入help即可获得有关在mysql客户端相关的帮助信息...> nowarning; Show warnings disabled. 3、服务端的相关帮助 --获取服务器管理相关的帮助,输入help contents mysql> help contents

    4.6K40

    浅谈MySQL 统计行数的 count

    MySQL count() 函数我们并不陌生,用来统计每张表的行数。但如果你的表越来越大,且是 InnoDB 引擎的话,会发现计算的速度会越来越慢。...Count() 的实现 InnoDB 和 MyISAM 是 MySQL 常用的数据引擎,由于两者实现的不同,导致 count() 操作计算的效率也不同。...由于 MVCC 的控制,使得 MySQL 具有并发的能力,也就是说对于同一时刻,InnoDB 返回的表的行数是不一定的,事务看到的行数与开启后的一致性视图有关,换句话说,每个事务能看到的数据版本是不一样的...但如果我们真的需要实时的获取的某个表的行数,应该怎么办呢? 手动保存表的数量 用缓存系统来保存计数 对于进行更新的表,可能会想到用缓存系统来支持。比如 Redis 里来保存某个表总行数。...而且还有一点,由于 redo log 的支持,在 MySQL 发生异常时,是可以保证 crash-safe。

    4.2K30

    MySQL如何获取存储过程参数?

    MySQL如何获取存储过程参数? 前两天有个小伙伴问我如何查看MySQL存储过程的参数问题,这个问题还真把我问住了。于是查了查官方文档,把查看的结果分享出来,希望对大家有帮助吧。...通常情况下,我们更愿意让开发同学将代码逻辑写在代码里面而非数据库中,因为数据库最擅长做的不是处理逻辑,而是进行数据的CRUD。...参数empno,int类型;一个输出的out参数out_name,是varchar类型 现在的问题是,如何通过SQL取出来这两个传入的参数?...02 获取参数的2种方案 方法一、使用mysql.proc表(仅限MySQL5.7及以下版本) 在MySQL的元信息表中,可以通过mysql.proc表去查看一个存储过程的参数,如下: mysql...总结: 作为一个开发同学,如何获取MySQL存储过程的输入输出参数,可能会有这方面的需求。

    4.9K60

    聊聊基于docker部署的mysql如何进行数据恢复

    朋友的数据库是基于docker搭建的,朋友一度怀疑是因为docker原因导致他恢复不成功。 数据恢复之binlog前置知识 注: 本文的例子为demo示例,mysql基于docker搭建。...配置内容如下 ##配置binlog日志路径以及日志文件名前缀、生成的日志格式为:binlog.000001 log-bin=/var/lib/mysql/binlog ##注意配置server-id,保证唯一性...=65945为恢复的开始位置 --stop-position=66150为恢复的结束位置 --database=demo_test 指定数据库为demo_test /var/lib/mysql/binlog.../binlog.000010 --result-file=/var/lib/mysql/binlog000010.sql 2、将生成的sql文件拷贝到宿主机 docker cp e0b7fb702f75...:/var/lib/mysql/binlog000010.sql / 3、导出来的文件内容如下 [38b7bb838f4ac61e6d5dc96dae560618.png] 注: 如果不加--base64

    2.6K30

    聊聊基于docker部署的mysql如何进行数据恢复

    朋友的数据库是基于docker搭建的,然后朋友一度怀疑是因为docker原因导致他恢复不成功。 2 数据恢复之binlog前置知识 注: 本文的例子为demo示例,mysql基于docker搭建。...配置内容如下 ##配置binlog日志路径以及日志文件名前缀、生成的日志格式为:binlog.000001 log-bin=/var/lib/mysql/binlog ##注意配置server-id,保证唯一性...=65945为恢复的开始位置 --stop-position=66150为恢复的结束位置 --database=demo_test 指定数据库为demo_test /var/lib/mysql/binlog.../binlog.000010 --result-file=/var/lib/mysql/binlog000010.sql 2、将生成的sql文件拷贝到宿主机 docker cp e0b7fb702f75...:/var/lib/mysql/binlog000010.sql / 3、导出来的文件内容如下 注: 如果不加--base64-output=decode-rows,则输出来的内容为base64加密内容

    3.1K20

    【MySQL】学习如何通过DQL进行数据库数据的条件查询

    在in之后的列表中的值,多选一 LIKE 占位符 模糊匹配(_匹配单个字符,%匹配任意个字符) IS NULL 是NULL 逻辑运算符 功能 AND 或 && 并且(多个条件同时成立) OR 或 ||...非 不是 条件查询Exercises 1.查询年龄等于 88 的员工 select * from emp where age = 88; 2.查询年龄小于 20 的员工信息 select...* from emp where AGE < 20; 3.查询年龄小于等于 20 的员工信息 select * from emp where AGE <= 20; 4.查询没有身份证号的员工信息 select...88 的员工信息 select * from emp where age !...8.查询性别为 女 且年龄小于 25岁的员工信息 select * from emp where GENDER = '女' and age < 25; 9.查询年龄等于18 或 20 或 40 的员工信息

    1.1K10

    Mysql如何随机获取表中的数呢rand()

    随机获取数据的业务场景,想必大家都有遇到过,今天我们分析一下如何正确的显示随机消息. mysql> CREATE TABLE `words` ( `id` int(11) NOT NULL AUTO_INCREMENT...上图我们发现sort_buffer中的位置信息,是个什么概念呢,而Mysql是如何定位一行数据的呢, 首先我们知道mysql中有以下规则 对于有主键的innodb表来说,rowid就是我们的主键 对于没有主键的...而优先级算法,可以精准的获取最小的三个word 从临时表中获取前三行,组成一个最大堆 然后拿下一行数据,和最大堆的R比较,大于R,则丢弃,小于R,则替换 重复2的步骤,直到把10000行数据循环完成...floor函数在这里的作用,就是取整数部分 获取 limit Y ,1,得到一行数据 对应的sql如下 mysql> select count(*) into @C from t; set @Y =...现在如果要获取三个随机数,根据随机算法2的思路 获取整张表的总行数C 根据同样的共识获取Y1,Y2,Y3 再执行limit Y,1.获取三个随机数 对应的sql语句如下 mysql> select

    7.4K20

    如何准确获取 MySQL 主从延迟时间?

    不久前,在一套采用 MySQL 5.7 作为部署版本的生产环境中,由于业务执行了大规模事务,进而引发了 MySQL 主从复制的延迟,最终暴露出数据一致性方面的严重问题。...由于业务做了读写分离,从库读取的数据与主库不一致,影响了应用逻辑。业务团队提出明确需求:需要知道主从延迟的具体时间值,以评估影响并优化系统。 请读者思考一下: 1. 如何获取主从延迟时间值? 2....如何判断获取的值是准确的? 随后我们分析了 MySQL 5.7 的内置指标 Seconds_Behind_Master[2] 的可靠性,并探索更精准的替代方案。...MySQL 5.7 的 Seconds_Behind_Master 并不可靠! 3解决方案:pt-heartbeat 如何获取主从延迟时间值?...-- 输出实时延迟,如 0.02s pt-heartbeat --user=root --password=xxx --monitor -D heartbeat 如何判断获取的值是准确的?

    1.1K10

    如何在多个MySQL实例之间进行数据同步和复制

    在多个MySQL实例之间进行数据同步和复制是一项关键的任务,它可以确保数据的一致性和可靠性。下面将详细介绍如何实现MySQL实例之间的数据同步和复制。...1、MySQL复制原理 MySQL复制是指将一个MySQL数据库实例(称为主节点)的数据完全或部分地复制到其他MySQL实例(称为从节点)的过程。...从节点连接到主节点,并请求从正在读取的二进制日志中获取更新信息。 从节点应用主节点上的写操作,实现数据同步。 2、配置MySQL复制 配置MySQL复制需要在主节点和从节点上进行一些设置。...MySQL提供了多种复制机制来满足不同的需求: 1)、主从同步复制: 主节点将写操作记录到二进制日志,并在从节点上直接应用这些写操作。...3)、 使用读写分离: 在从节点上启用只读模式,并将读操作分配到从节点上,减轻主节点的负载并提高系统的整体性能。 在多个MySQL实例之间进行数据同步和复制是保证数据一致性和可靠性的重要任务。

    2.1K10
    领券