iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >MySQLselectcount(*)计数很慢优化方案
  • 841
分享到

MySQLselectcount(*)计数很慢优化方案

MySQLselectcount(*)计数慢优化MySQL优化 2022-11-13 14:11:18 841人浏览 薄情痞子
摘要

目录前言1. MyISAM存储引擎计数为什么这么快?2. 能不能手动实现统计总行数3. InnoDB引擎能否实现快速计数4. 四种计数方式的性能差别前言 在日常开发工作中,我经常会遇

前言

在日常开发工作中,我经常会遇到需要统计总数的场景,比如:统计订单总数、统计用户总数等。一般我们会使用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 * 的。

到此这篇关于mysql select count(*)计数很慢优化方案的文章就介绍到这了,更多相关MySQL 优化内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

您可能感兴趣的文档:

--结束END--

本文标题: MySQLselectcount(*)计数很慢优化方案

本文链接: https://www.lsjlt.com/news/172390.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MySQLselectcount(*)计数很慢优化方案
    目录前言1. MyISAM存储引擎计数为什么这么快?2. 能不能手动实现统计总行数3. InnoDB引擎能否实现快速计数4. 四种计数方式的性能差别前言 在日常开发工作中,我经常会遇...
    99+
    2022-11-13
    MySQL select count(*)计数慢优化 MySQL 优化
  • php limit查询很慢如何优化
    这篇文章主要介绍了php limit查询很慢如何优化的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇php limit查询很慢如何优化文章都会有所收获,下面我们一起来看看吧。为什么Limit查询很慢?Limit查...
    99+
    2023-07-05
  • php str_replace速度很慢怎么优化
    要优化str_replace的速度,可以考虑以下几点: 尽量减少str_replace的调用次数:将多个替换操作合并为一个操作,...
    99+
    2023-10-27
    php
  • 如何优化数据量很大,分页查询很慢的问题
    这篇文章主要介绍“如何优化数据量很大,分页查询很慢的问题”,在日常操作中,相信很多人在如何优化数据量很大,分页查询很慢的问题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何...
    99+
    2024-04-02
  • idea启动项目很久很慢的一种解决方案
    一、问题描述         IntelliJ idea 在启动项目时,很久很慢。 二、解决         在不买个更强更贵的前提下,有以下一种解决方案(ಥ_ಥ)          ​​​​​​​    1、方案依据         一般...
    99+
    2023-09-04
    intellij-idea java ide
  • Win10运行很慢? Win10必做的9项优化
    想让系统更快些,就需要优化它。虽然和之前版本相比,Win10在底层性能上已经不错,但毕竟要照顾不同的使用人群,因此它的很多项目还是偏向于保守和大众化的。其实每个人使用Win10的目的都不同,有选择性地关闭一些服务,就可以...
    99+
    2023-05-22
    Win10
  • php limit查询为什么很慢?怎么优化?
    当我们在使用PHP编写Web应用程序时,有时我们需要从数据库中检索大量数据。在这些情况下,我们通常使用limit子句来限制结果集中返回的行数。但是,当我们遇到一个大型数据集时,我们可能会发现limit查询变得相当缓慢。在本文中,我们将讨论为...
    99+
    2023-05-14
    limit查询 php 数据库
  • MySQL优化方案之开启慢查询日志
    目录前言设置慢查询日志测试附:日志分析工具mysqldumpslow总结前言 本方案只适应于小的项目、项目未上线或者紧急情况下可采用这种方式,一旦开启慢日志查询会增加数据库的压力,所...
    99+
    2024-04-02
  • 一个20秒SQL慢查询优化处理方案
    目录1.背景2.复杂SQL语句的构成3.关联查询4.子查询5.耗时在哪?6.问题定位7.初步断定9.再进一步验证10.解决方案11.另外一个需要注意的点1.背景 页面无法正确获取数据...
    99+
    2024-04-02
  • K3数据库优化方案
    K/3 系统性能优化解决方案 作者:诗欢--重建索引速度较慢,请在系统空闲时间进行DBCC DBREINDEX(t_icitem)DBCC DBREINDEX(t_item)DBCC DBREINDEX(t_itemclass)DBCC D...
    99+
    2023-01-31
    数据库 方案
  • 阿里云服务器很慢原因、解决方法和优化建议
    本文将深入探讨阿里云服务器慢的原因,并提供相应的解决方法和优化建议。阿里云服务器是阿里云推出的一种高性能、高可用的云计算服务,适用于企业级应用的部署和运行。然而,有时阿里云服务器可能会出现运行速度慢的情况,影响到应用的正常运行。本文将针对这...
    99+
    2023-11-06
    阿里 解决方法 很慢
  • 郑州网站设计方案怎么优化
    1. 网站结构优化:合理规划网站的栏目和分类,使用户能够快速地找到所需信息。2. 内容优化:网站的内容应该质量高、有价值,且符合搜索...
    99+
    2023-06-13
    郑州网站设计
  • 云服务器成本优化方案设计
    云服务器成本优化方案可以考虑以下几个方面: 服务器硬件选型:选择高效且可靠的服务器硬件,例如高端的服务器品牌、大容量存储设备等,以支持云计算服务的高性能和稳定性。 数据存储和备份:考虑使用备份软件将数据备份到云服务器上,以减轻云服务器的...
    99+
    2023-10-27
    方案设计 成本 服务器
  • Mysql慢查询优化方法及优化原则
    1、日期大小的比较,传到xml中的日期格式要符合'yyyy-MM-dd',这样才能走索引,如:'yyyy'改为'yyyy-MM-dd','yyyy-MM'改为'yyyy-MM-dd'【这样MYSQL会转换为...
    99+
    2024-04-02
  • 基于Maven导入pom依赖很慢的解决方案
    目录Maven导入pom依赖很慢的问题原因第一步:找到maven的安装路径 ,修改settings.xml第二步:重启idea 导入依赖发现会很快Maven导入pom依赖很慢的问题 ...
    99+
    2024-04-02
  • Mysql数据库慢查询常用优化方式
    目录慢查询日志概念一、数据库中设置SQL慢查询1、mysql慢查询相关配置参数介绍2、实现配置步骤二、分析慢查询日志三、常见的慢查询优化1、索引没起作用的情况2、优化数据库结构3、分解关联查询4、优化LIMIT分页四、常...
    99+
    2023-05-05
    mysql如何优化慢查询 如何优化慢查询sql 优化mysql查询速度
  • Windows XP 优化方案
    1、自动关闭停止响应程序 有些时候,XP会提示你某某程序停止响应,很烦,通过修改注册表我们可以让其自行关闭,在HKEY_CURRENT_USER\Control Panel\Desktop中将字符健值是AutoEndTa...
    99+
    2023-05-23
    Windows XP 优化 方案
  • MySQL千万级数据优化方案
    简介                           ↓↓↓处理千万级数据的MySQL数据库,可以采取以下优化措施↓↓↓                                                       ...
    99+
    2023-10-24
    mysql 数据库
  • 深度翻页导出导致慢SQL,mysqlCPU飙升优化方案
    慢SQL原因分析: 深度翻页 多表JOIN 大IN id倒排序 本文针对深度翻页的优化进行探讨 方案1:  将limit   offset, pageSize的方式改成 id > xx limit pageSize. 这样能走Id...
    99+
    2023-09-18
    sql 数据库
  • MySQL慢日志优化的案例分析过程
    这期内容当中小编将会给大家带来有关MySQL慢日志优化的案例分析过程,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。最近在分析一个问题的时候,...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作