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

mysql如何更新统计数据

MySQL更新统计数据通常是指更新表中的统计信息,这些信息用于优化器估计查询的执行计划。统计信息包括表的行数、列的唯一值数量、索引的分布等。以下是更新统计数据的基础概念、优势、类型、应用场景以及常见问题解决方案。

基础概念

MySQL的统计信息存储在系统表mysql.innodb_index_statsmysql.innodb_table_stats中。这些统计信息帮助查询优化器选择最优的执行计划。

优势

  1. 优化查询性能:准确的统计信息可以帮助优化器生成更高效的查询执行计划。
  2. 减少资源消耗:通过避免不必要的全表扫描,可以减少CPU和I/O资源的消耗。

类型

  1. 表级统计信息:包括表的行数、数据大小等。
  2. 索引级统计信息:包括索引的行数、唯一值数量、索引叶节点的平均页面数等。

应用场景

当表的数据发生大量变化(如插入、删除、更新操作)后,统计信息可能会变得不准确,这时需要更新统计信息以确保查询优化器能够生成正确的执行计划。

更新统计数据的方法

MySQL提供了几种方法来更新统计信息:

  1. 自动更新:MySQL会定期自动更新统计信息,但这个频率可能不足以应对大量数据变化的情况。
  2. 手动更新:可以使用ANALYZE TABLE语句手动更新统计信息。
代码语言:txt
复制
ANALYZE TABLE table_name;

常见问题及解决方案

问题:为什么统计信息不准确?

原因

  • 表的数据发生了大量变化,而MySQL没有及时更新统计信息。
  • 统计信息收集的频率设置得太低。

解决方案

  • 手动执行ANALYZE TABLE语句来更新统计信息。
  • 调整MySQL的配置参数,如innodb_stats_auto_recalc,以增加统计信息更新的频率。

问题:执行ANALYZE TABLE时性能受影响怎么办?

原因

  • ANALYZE TABLE会扫描整个表来收集统计信息,对于大数据量的表来说,这个过程可能会很耗时。

解决方案

  • 在低峰时段执行ANALYZE TABLE
  • 使用在线DDL工具(如pt-online-schema-change)来减少对业务的影响。

参考链接

通过以上方法,可以有效地更新和管理MySQL的统计信息,从而优化查询性能。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

actions自动更新站点统计数据

简析原理 获取百度统计开放api的token,利用python将百度统计api返回的统计数据下载保存为json文件,再利用JavaScript读取并处理json数据,将处理好的数据通过echarts.js...值得注意的是获取的token是由有效期的为一个月需要每隔一个月重新利用refresh_token重新更新token故可将更新token的链接保存好待token失效后可直接利用该链接更新。...若你没有完成GitHubactions集成化部署也可以通过此方法定期半自动更新,不过还是建议弄一下集成化部署真的很香。...写入如下内容: yaml name: 获取百度统计数据 on: schedule: - cron: ' 0 0,6,12,18 * * *' jobs: deploy: runs-on...git config --global user.email "你的GitHub邮箱如3447851674@qq.com" git add . git commit -m "百度统计数据上传

82030
  • MongoDB 学习建模与设计思路--统计数据更新案例

    最近在读萧少聪老师翻译的书,MongoDB DATA MODELING AND SCHEMA DESIGN,主要是关于如何对数据建模的部分,当然这里建模是有倾向性的,是对于NOSQL的部分进行数据建模的一些理论和案例...比如我们要关注的查询的频率,结果的延迟,数据量,数据写入的速度,数据的更新等等。...如何打破原有的传统的RDBMS理论中的一些概念如三范式,外键,级联等关系的概念有助于你设计出一个更好的基于NOSQL的业务系统。 废话了这么多,我们举几个书中的案例,且和可以在深入一下。...1000以内,900以上,我们就写1000,缓存10内获得数字是10000以内 90000万以上,我们就写10万,以此类推,我们UPDATE到NOSQL中的数字的频率大大降低了,可以10秒进行一次数据的更新

    7800

    mysql聚合统计数据查询缓慢优化方案

    sql聚合函数 在mysql等数据中,都会支持聚合函数,方便我们计算数据。...并且此条sql运行很慢,我们应该如何排查优化? 有的同学会说了:行数多,在日期字段上加索引,这样子筛选就很快了。 总数1亿条,假设7月份的订单有1000万条,加了索引的时候,筛选速度自然会提升不少。...增加索引并不能解决聚合函数统计慢的问题 优化聚合统计的方案 提前预算 建立统计数据表,以日期区分,如:20190801一天,销售了多少订单、金额等等数据。...当订单产生(支付完成后 可统计数据)时,便在统计数据表中对应的日期增加金额、数量。...来定时(比如每20分钟一次)计算总和,然后更新到统计数据表中。 优点:做的处理比较少,也无需改动退款操作等api,只需要依赖原订单表的数据,定时统计、刷新统计数据。

    6.9K20

    MySQL视图更新

    本文主要说明视图的更新限制,如需关于视图的更多知识,参考:MySql视图原理讲解与使用大全 视图简介 视图不是表,不能直接存储数据,是一张虚拟的表,视图和数据库的表存在着对应的关系,我们在某些情况下是可以通过视图来操作数据库的表...一般情况下,在创建有条件限制的视图时,加上 "WITH CHECK OPTION"命令 视图的更新问题 某些视图是可更新的。...仅引用文字值(在该情况下,没有要更新的基本表)。 ALGORITHM = TEMPTABLE(使用临时表总会使视图成为不可更新的)。 注意: 视图中虽然可以更新数据,但是有很多的限制。...一般情况下,最好将视图作为查询数据的虚拟表,而不要通过视图更新数据。因为,使用视图更新数据时,如果没有全面考虑在视图中更新数据的限制,就可能会造成数据更新失败。...option都一样 对于insert,有with check option,要保证insert后,数据要被视图查询出来 对于没有where 子句的视图,使用with check option是多余的 本文参考:MySql

    3.2K30

    Mysql - 多张千万级统计数据实践笔记(PHP Script)

    答案是取1000条,如果服务器的内存允许,一次可以取更多条,应该尽量避免mysql进程中连接和断开的消耗,性能提高的非常明显,17w测试数据,从8条/秒 提升到 140条/秒!...获取Mysql中最小的数据,主要统计用户行为,所以对用户分组SELECT `user_id` ,`novel_id` ,`chapter_id` ,MIN(DATETIME) AS `datetime`...FROM `wm_novel_reward`WHERE `user_id` BETWEEN 1AND 1006GROUP BY user_id`出于对安全的考虑,当mysql是字符串的时候,需要对字符串进行转义...2.mysql层面使用sql语句去重,使用 INSERT IGNORE INTO去重:INSERT IGNORE INTO 与 INSERT INTO 的区别就是 INSERT IGNORE INTO...其实有一个问题特别迷惑,Mysql数据库里的数据就是以特殊结构存储(B-tree)的文件,Redis中的数据也是用(list、hash)结构存储的数据,存储上没有什么太大的不同,只是有快慢的区别。

    1.1K50

    MySQL统计数据库所有表的数据量

    场景:mysql统计一个数据库里所有表的数据量,最近在做统计想查找一个数据库里基本所有的表数据量,数据量少的通过select count再加起来也是可以的,不过表的数据有点多,不可能一个一个地查 记得在...在mysql里是可以查询information_schema.tables这张表的 SELECT table_rows,table_name FROM information_schema.tables...大概意思是对于MyISAM才是正确的统计数据,但是对于InnoDB引擎的,可能与实际值相差 40% 到 50%,所以只是一个大概的统计 所以针对这种情况,要更改存储引擎,肯定是不太合适,因为InnoDB...是默认的存储引擎,能支持事务外健,并发情况性能也比较好 所以,根据网上的做法,重新analyze 对应表,在mysql8.0版本是不管用的,发现查询数据还是不对,估计是mysql版本太高,mysql5版本没验证过...analyze table [table_name] 继续找资料,在Navicat工具->命令行页面,设置全局或者回话的information_schema_stats_expiry为0,表示自动更新

    6.9K10

    MySQL中一条更新的SQL如何执行

    MySQL 之 -- 一条更新的 SQL 如何执行,一条更新的 SQL 语句如何执行执行流程一条 SQL 的执行流程如图所示:(图片来源于网络) 如图所示:MySQL 数据库主要分为两个层级:服务层和存储引擎层服务层...存储引擎也可以在创建表的时候手动指定,比如: SQL 语句的执行过程 连接器:需要 MySQL 客户端登录,需要一个 连接器 来连接用户和 MySQL 数据库,“mysql -u 用户名 -p 密码”...但是查询缓存不建议使用, 因为在 MySQL 中对某张表进行了更新操作,那么所有的查询缓存就会失效,对于更新频繁的数据库来说,查询缓存的命中率很低。...记录的是这个语句的原始逻辑,比如 “给 ID=2 这行的 C 字段加 1” binlog 有两种模式:statement 格式是记录执行的 sql 语句,而 row 格式是记录行的内容,会记录两行数据,分别是:更新前的这行数据和更新后的这行数据...引擎将这行新数据更新到内存中,同时将这个更新操作记录到 redo log 里面,此时 redo log 处于 prepare 状态。然后告知执行器执行完成了,随时可以提交事务。

    1.2K10

    MySQL中一条更新的SQL如何执行

    MySQL 之 -- 一条更新的 SQL 如何执行,一条更新的 SQL 语句如何执行执行流程一条 SQL 的执行流程如图所示:(图片来源于网络) 如图所示:MySQL 数据库主要分为两个层级:服务层和存储引擎层服务层...但是查询缓存不建议使用, 因为在 MySQL 中对某张表进行了更新操作,那么所有的查询缓存就会失效,对于更新频繁的数据库来说,查询缓存的命中率很低。...记录的是这个语句的原始逻辑,比如 “给 ID=2 这行的 C 字段加 1” binlog 有两种模式:statement 格式是记录执行的 sql 语句,而 row 格式是记录行的内容,会记录两行数据,分别是:更新前的这行数据和更新后的这行数据...引擎将这行新数据更新到内存中,同时将这个更新操作记录到 redo log 里面,此时 redo log 处于 prepare 状态。然后告知执行器执行完成了,随时可以提交事务。...执行器调用引擎的提交事务接口,引擎把刚刚写入的 redo log 改成提交(commit)状态,更新完成。

    93010

    如何使用StreamSets从MySQL增量更新数据到Hive

    Fayson的github:https://github.com/fayson/cdhproject 提示:代码块部分可以左右滑动查看噢 1.文档编写目的 ---- 在前面Fayson介绍了《如何在CDH...中安装和使用StreamSets》,通过StreamSets实现数据采集,在实际生产中需要实时捕获MySQL、Oracle等其他数据源的变化数据(简称CDC)将变化数据实时的写入大数据平台的Hive、HDFS...本篇文章主要介绍如何使用使用StreamSets通过JDBC的方式实时抽取增量数据到Hive。 StreamSets实现的流程如下: ?...去HUE 页面查看hive 表中的数据,发现已经更新进来 ? 4.Pipeline流程测试 ---- 1.去mysql 中增加数据并查看 ? 查看管道流信息发现输入输出数量变成了4 ?...去HUE 中查看hive 表的数据,跟mysql 中同步,说明增量更新成功 ?

    14.9K130

    Windows Mysql 版本更新

    Windows Mysql 版本更新 感谢大佬文章,借鉴学习 超详细教你怎么升级Mysql的版本_Mysql_脚本之家 (jb51.net) 前言 软件时代变迁,更新迭代之快,我们每天都需要使用很多的软件...… 作为程序员,我们都知道世界上没有完美的软件,好的软件,必然要经过不停的 ==版本更新迭代== 最近,在学习新的技术框架,ruoyi 但它的部署环境,与本人的有一点不符合,Mysql要求5.7...更新版本中踩了很多坑,也看了很多文章, 整理了这篇文章 大致流程 更新Mysql 版本,网上也搜索了很多的资料 有的是直接更改配置…更改版本号…巴拉巴拉 不需要去重新,下载新版 Mysql服务...直接更改元配置… mysql版本更新就是更改/添加一些默认配置,导入导出算法配置 不过本人觉得太麻烦了, 过程繁琐…本人就直接: 停止mysql服务 卸载旧版本 下载要下载的版本...下载Mysql 浏览器搜索Mysql 服务安装 MySQL MySQL版本 按照用户群 分为: 社区版(Community) 企业版(Enterprise) 两个版本 社区版:可自由 免费下载 但 官方不提供技术支持

    13710
    领券