首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

来源:blog.csdn.net/LJFPHP/article/details/84400400 一、前言 这个问题是今天朋友提出来,关于查询一个1200w数据行数,用count(*)速度一直提不上去...找了很多优化方案,最后另辟蹊径,选择了用explain来获取行数。 二、关于count优化 网上关于count()优化有很多。...博主这边思路就是没索引就建立索引关系,然后使用count(1)或者count()来提升速度。这两个函数默认使用是数据中最短那个索引字段。...三、使用explain获取行数 1、关于explain 关于explain,使用mysql都知道,这个函数是专门用于查看sql语句执行效率,网上可供参考文章很多。...我们使用explain之后,会看到返回很多参数,其中: rows:显示MySQL认为它执行查询时必须检查行数。就是这个东西了,既然我们要获取是数据行数,那么可以使用: ?

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

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

引擎把一个行数存在了磁盘上,因此执行count(*)时候直接返回个数,效率很高 而innoDB引擎就麻烦了,他执行count(*)时候,是一行行累加计数 当然我们要知道此事是没有带条件...,所以主键索引比普通索引树大些,因此mysql优化器会拿到索引树小,进行遍历计算,在保证逻辑正确前提下,尽量减少扫描数据量,是数据库优化通用手段之一 此时你可能还依稀记得下面命令可以获取数量...对于更细跟频繁库来说,我们可能就会想到使用缓存系统,比如redis,于是我们试试用redis服务来保存这个行数,这个每插入一条数据,redis就加1,每次删除就减一,试想一下还有什么问题吗 缓存系统可能会发生数据丢失...比如有个页面要显示近期操作100条记录和总操作数,这页面的逻辑就是到redis获取总数,再到数据库获取100条记录,如下两种会发生数据不一致情况 查询到100结果里面有最新插入数据,而redis...不管上面那种时序去查询数据,最终结果都会不准确, 使用数据库保存计数 我们可以使用在数据库新建一张C去记录操作行数,由于innodb支持崩溃恢复不丢失数据,因此可以解决数据丢失问题,是否能解决不准确问题呢

4.9K20

mysql源和目标端行数检查

导数据是很长有的事, 导完了总得检查一下把, 云上有DTS很方便, 但是有的环境只能手动导数据了, 这比较就比较麻烦了, 或者是用户自己导, 让你检查检查, 总之检查两个库之间数据量是很常见工作...常见工作做多了就饭, 就写个脚本, py效果更好, 但是不如shell方便(因环境而异). 我分享下脚本检查mysql两库之间数据行数脚本吧....\ DST_PORT=3306 \ DST_DBNAME=db2 \ PARALLEL=16 \ TABLE_FILE=table.txt 本脚本如果不指定TABLE_FILE参数的话, 默认会比较数据库下面所有的.../bin/env bash #write by ddcw at 2021.06.26 #检查mysql数据是否一致, 只检查行数量 #用法, sh $0.sh src_user/src_passowrd...'{print $1}')\033[0m" echo -e "一致: ${same_tbale} \t 不一致: ${no_same_tbale}" } init_param # echo

93020

MYSQL数据库-约束

零、前言 本章主要讲解学习MYSQl数据库约束 约束 真正约束字段是数据类型,但是数据类型约束很单一,需要有一些额外约束,更好保证数据合法性,从业务逻辑角度保证数据正确性...包含班级名和班级所在教室 如果班级没有名字,你不知道你在哪个班级,如果教室名字可以为空,就不知道在哪上课 所以在设计数据库时候,一定要在中进行限制,满足上面条件数据就不能插入到中,这就是...在关系数据库中,索引是一种单独、物理数据库中一列或多列值进行排序一种存储结构,它是某个中一列或若干列值集合和相应指向中物理标识这些值数据页逻辑指针清单 索引作用相当于图书目录...这样可以使对应于SQL语句执行得更快,可快速访问数据库特定信息 7、唯一键 一张中有往往有很多字段需要唯一性,数据不能重复,但是一张中只能有一个主键:唯一键就可以解决中有多个字段需要唯一性约束问题...解决方案就是通过外键完成。建立外键本质其实就是把相关性交给mysql去审核了,提前告诉mysql之间约束关系,那么当用户插入不符合业务逻辑数据时候,mysql不允许你插入

7.5K30

谁说MySQL行数不要超过2000W?

背景 网上看了一篇文章《为什么说MySQL行数不要超过2000w》,亲自实践了一下,跟原作者有不同结论。...首先我们先想想数据库行数最大多大?...单建议值 下面我们就以 3 层,2 分叉(实际中是 M 分叉)图例来说明一下查找一个行数过程。...,比如,数据库版本,服务器配置,sql 编写等等,MySQL 为了提高性能,会将索引装载到内存中。...但是,当单数据库到达某个量级上限时,导致内存无法存储其索引,使得之后 SQL 查询会产生磁盘 IO,从而导致性能下降,所以增加硬件配置(比如把内存当磁盘使),可能会带来立竿见影性能提升哈。

33040

mysql清空数据库所有命令_mysql清空数据命令是什么?_数据库,mysql,清空数据…

mysql服务无法启动怎么解决_数据库 mysql服务无法启动解决方法是: 1、配置环境变量; 2、在mysql安装目录下,新建my.ini文件,设置默认字符集、端口、存储引擎等; 3、执行【mysqld...mysql清空数据命令有以下两种语句: 语句1: delete from 名; 语句2: truncate table 名; 比 较:mysql查看数据库命令是什么?..._数据库 mysql查看数据库命令: 1、查看所有数据库命令是:“show databases”。 2、查看当前使用数据库命令是:“select database()”。...(1)不带where参数delete语句可以删除mysql中所有内容,使用truncate table也可以清空mysql中所有内容。...(3)delete效果有点像将mysql中所有记录一条一条删除到删完,而truncate相当于保留mysql结构,重新创建了这个,所有的状态都相当于新

19.6K20

MySqlMySQL数据库--什么是MySQL

专栏持续更新中:MySQL详解 一、背景 先要从 InnoDB 索引实现说起,InnoDB 有两大类索引: 聚集索引(clustered index) 普通索引 (secondary index...InnoDB 聚集索引 叶子节点存储行记录,因此,InnoDB 必须要有,且只有一个聚集索引: 如果定义了主键,则主键就是聚集索引; 如果没有定义主键,则第一个 not null unique...通俗讲就是,如果索引列在 select 所需获得列中(因为在 mysql 中索引是根据索引列值进行排序,所以索引节点中存在该列中部分值)或者根据一次索引查询就能获得记录就不需要回,如果 select...所需获得列中有大量非索引列,索引就需要到中找到相应信息,这就叫回。...四、解决办法 使用覆盖索引可以解决上面所说问题。

19210

MySQL十四:单最大2000W行数

超过2000W行数据一定会导致性能下降吗?我认为是不一定,虽然说建议单不超过2000W,但是我不接受它建议可不可以?那必然也是可以。...一、单最大到底能存多少数据 先来看看下面这张图,了解一下mysql各个类型大小 我们知道在MySQL是支持主键自增长,不考虑其他因素前提下,理论上只有主键没有用完,数据就可以一直增加。...但是数据量大小却跟2000W没啥影响,既然百度大佬推荐单最大2000W行数据,那肯定不会是空口白话,一定定会有其他影响行数因素」。...2.1 数据存储结构 在MySQL中默认存储引擎是InnoDB,在之前《存储引擎》中有说过,InnoDB为每个都生成了两个文件: .frm文件:结构文件 .ibd文件:数据文件(聚簇索引包含数据与索引...,每条大小都为1KB,即每个数据页存储15条数据。」

3.8K50
领券