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

浅谈MySQL 统计行数的 count

MySQL count() 函数我们并不陌生,用来统计每张表的行数。但如果你的表越来越大,且是 InnoDB 引擎的话,会发现计算的速度会越来越慢。...在这篇文章里,会先介绍 count() 实现的原理及原因,然后是 count 不同用法的性能分析,最后给出需要频繁改变并需要统计表行数的解决方案。...由于 MVCC 的控制,使得 MySQL 具有并发的能力,也就是说对于同一时刻,InnoDB 返回的表的行数是不一定的,事务看到的行数与开启后的一致性视图有关,换句话说,每个事务能看到的数据版本是不一样的...另外在使用 show table status 时,也可以查询出行数,而且速度很快,但需要注意的是,该命令是通过索引统计的值来采样估算的。官方文档说误差可以有 40%-50%....MyISAM 不加 where 条件,查询会很快,但不支持事务。InnoDB 支持事务,由于 MVCC 的实现,导致每次查询都需要一行行的扫描,效率不高。

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

    MYSQL统计行数时到底应该怎么COUNT

    相信每个人在写代码时都有遇到过要获取MYSQL表里数据行数的情况,多数人获取数据表行数时都用COUNT(*),但同时也流传了不少其他方式,比如说COUNT(1)、COUNT(主键)、COUNT(字段)。...文章中都是针对MySQL的InnoDB引擎展开讨论的,MyISAM引擎是把一个表的总行数记录在了磁盘里,查询时效率很高(如果加了where条件也不能直接从磁盘返回)。...而InnoDB由于多版本并发控制(MVCC)的原因,即使时同一时刻的查询InnoDB表应该"返回多少行"也是不确定的,比如假设表t中有10000行数据: 时刻 会话A 会话B 会话C T1 begin;...会话B在T5插入一条新数据,在T6查询时 count(*)的结果是10002(T4 begin时会话C insert语句已经提交,所以在会话B的事务中能看到这个更新)。...另外要注意,很多人为了销量会把表的行数记录到Redis中,但这样不能保证Redis里的计数和MySQL表里的数据保持精确一致,这是两个不同的存储系统不支持分布式事务所以就无法拿到精确的一致性视图,如果为了效率把表行数单独存储那么最好存放在一个单独的

    2K20

    mysql的count统计查询到底要怎么用【mysql】

    一、前言 1,有人问我,count查询为啥有时候快有时候慢 2,首先要明白count查询的真正作用 2-1:统计某个列的数量 2-1:统计行数 二、原理 1,统计列时,会查询这个列不为空的数量,它是需要计算的...2,统计行数时,如果不加where,它可以直接取到结果,因为它可以利用存储引擎的特性直接获得这个值,比如count(*) 3,统计列时,如果知道这个列不能为空,会转化为count(*),从而加快速度...在无可用的二级索引情况下,执行count会使MySQL扫描全表数据,当数据中存在大字段或字段较多时候,其效率非常低下(每个页只能包含较少的数据条数,需要访问的物理页较多) 三、实际应用 1,50万条数据...,没有索引,大约耗时13分钟 2,50万条数据,有索引,大约耗时354毫秒 3,原理 mysql一个数据页为:16k(默认) 能存16*1024/(4+8) =1365条数据(为什么是4+8可以看看mysql...存储页的原理) 假设每页数据耗损不存满,50% 50万条数据,需要500000/1365*2 为 732个物理页 大小为16k*732为11.4M mysql空间按区分配,一区1M,假设连续的话,需要连续读

    4.7K20

    python统计文件行数

    需求: 需要统计一个文件的行数....讨论: 最简单的办法是把文件读入一个大的列表中,然后统计列表的长度.如果文件的路径是以参数的形式filepath传递的,那么只用一行代码就可以完成我们的需求了: count = len(open(filepath...当 外部系统提供统计行数的方法时,你可以使用它们(通过os.popen),如unix的wc - l.当然,通过自己的程序来完成会更简单,快捷和通用.你可以假设大多数的文本文件都有合理的大小,所以把它们一次读入内存中处理是可行的...第三种方法的核心思想是统计缓存中回车换行字符的个数.这可能最不容易直接想到的方法,也是最不通用的方法,但它可能是最快的方法....,实际上,一般用户不会在意10%左 右的性能差别.另外,最快的方法是用循环处理文件对象,而最慢的方法是统计换行符的个数.在实际中,假如不考虑处理那些好几百M的大文件,我总是会选中第一种最简单的方法.

    2.9K20

    git 统计代码行数

    版本发布的时候需要统计代码行数 一行命令: git log --format='%aN' | sort -u | while read name; do echo -en "$name\t"; git...{ printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }' -; done 使用方法:在需要统计的...注:added lines 代表增加行数,removed lines代表移除行数,total lines代表总行数,但总行数的计算规则是增加的行数减去移除的行数,比如你增加了一行修改了一行,增加行数是2...,移除行数是1,但其实代码量是应该将修改行数也计入的,所以计算增加行数也就是added lines即可 小知识: 绩不如人:绩效不如他人。...据说程序员按代码行数统计工作量 快看看是不是你的代码被remove掉了

    6.1K30

    VSCode统计代码行数

    很多小伙伴在开发时想知道当前项目代码行数是多少,很多人会使用Git来进行查看,但是在开发中如果编辑器使用了VsCode我们可以使用VsCode的插件--VS Code Counter来进行代码行数查询。...1.下载插件 在VsCode侧边栏搜索插件名进行下载: image.png 2.配置插件 编写插件配置选择哪些文件统计,哪些文件不统计VsCode插件市场文档 //代码统计 "VSCodeCounter.languages...VSCodeCounter.useGitignore": true, //使用.gitignore "VSCodeCounter.outputAsCSV": false, //不输出CSV //排除统计文件...3.生成结果 如果是从根路径开始检测就在目录的空白处右键,如果是想要检测文件夹内代码行数就对指定文件夹右键后选择 Count lines in directory image.png image.png...4.获得结果 会获得一个md文档和txt文件等等 image.png 这是本项目(个人博客系统)截止2022-05-14时的有效代码行数(把依赖包,成果物,配置文件都排除掉了) image.png

    10.8K30

    git 代码行数统计

    命令需要在bash下运行,windows系统可使用git客户端附带的“git bash here”右键菜单进入bash命令行 统计所有代码行数 git log --pretty=tformat: --...total lines: %s\n", add, subs, loc }' 命令详解: 使用指定格式输出日志 git log --pretty=tformat: --numstat 输出形式为 添加行数...删除行数 文件路径 读取每一行日志并分成数个字段进行处理,并在处理完成后执行END指定的命令输出汇总信息 awk '{ add += $1; subs += $2; loc += $1 - $2...} END { printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }' 统计一定时间内产生的代码行数...= $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }' 统计指定开发者一段时间内产生的代码行数

    2.4K10

    MySQL索引(六)索引优化补充,分页查询、多表查询、统计查询

    多表查询的两种算法 MySQL 的多表查询会用到两种方案:嵌套循环连接(Nested-Loop Join) 算法和基于块的嵌套循环连接 (Block Nested-Loop Join) 算法。...对于 SELECT * FROM t1 INNER JOIN t2 ON t1.a = t2.a; MySQL 大致的执行流程如下: 从驱动表 t2 中读取一行数据,若 t2 表存在查询条件,则先执行条件过滤...EXISTS 子查询实际执行过程由MySQL 进行了优化,并不是通常理解上的逐条对比。 EXISTS 子查询通常可以用 JOIN 实现,不过最优方案需要根据具体问题去具体分析。...答案是二级索引相对于主键索引存储的数据较少,检索的效率更高。 优化 若使用myisam 存储引擎,每个表会维护一个总行数,查询总行数是不需要进行计算的。...增加数据库统计表,在更新数据行的事务中,增加维护统计表操作。注意需要在一个是事务中实现。

    2.9K10
    领券