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

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 "百度统计数据上传

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

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

    40400

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

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

    7.7K30

    mysql如何设置update时间字段自动更新?

    由于给文章表设计的有创建时间和更新时间两个字段,但是更新时间字段需要在更新文章后再次更新,当时由于不了解mysql还可以设置自动更新时间戳的功能,而是在更新文章的接口中手动更新时间字段,即以下这种方式:...update pages set update_date=now() 由于最近考虑给一些编辑功能增加更新时间字段,了解到Mysql 本身已经支持这个功能了,所以尝试采用新的方式来实现update_date...自动更新。...sql语句核心的语句为 ON UPDATE CURRENT_TIMESTAMP 所有可以将通过执行以下语句来实现时间字段自动更新功能: # 若该字段不存在 ALTER TABLE `dsiab_com`...如果你是用的phpmyadmin来管理数据的话那么可以通过以下方式实现自动时间更新功能,当然这种方式本质上还是通过上面的方式,只是这种不需要需执行代码,只需要通过鼠标就可以完成。

    91710

    MySQL视图更新

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

    5.1K30

    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,表示自动更新

    8.4K10

    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.5K50

    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.7K10

    MYSQL-如何恢复误删除(更新)的数据

    作者介绍:简历上没有一个精通的运维工程师,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 数据库是一个系统(应用)最重要的资产之一,所以我们的数据库将从以下几个数据库来进行介绍。...MySQL(本章节) PostgreSQL MongoDB Redis Etcd 我们前面使用备份+Binlog恢复数据,这个只是作为兜底来使用。...而且我们前面已经搭建过主从,可以直接把从节点升级为主节点来提供服务,但是我们还可能出现在主从正常的情况下,因为误删除或者其他原因需找回删除或者更新的数据,今天这个小节我们就来介绍方法。...1.删除(更新的数据)在备份里面 如果是这样的情况,相对比较简单,因为只需要把备份数据导入到一个新的数据库里面,然后从里面提取我们需要的数据,再更新到源数据库即可恢复。...2.删除(更新的数据)在Binlog里面 这个时候的数据属于刚更新的数据,还未有备份,只能从Binlog数据进行恢复。

    80410

    如何使用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 中同步,说明增量更新成功 ?

    16.2K130

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

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

    1.4K10

    多说更新到 1.0 版本:支持社交账号注册和后台统计数据

    最好用的社会化评论系统多说的 WordPress 插件更新到 1.0 版本,这个版本开始支持支持社交账号注册和后台统计数据,使得多说向互联网基础设施服务更进一步。...1.0 版本的详细更新信息: 社交登录的新用户允许绑定和注册!在注册页面会出现社交登陆按钮,点击进行社交授权之后,会进入 WP 正式注册流程,输入用户名和邮箱,由 WP 发送密码到邮箱完成注册。...评论流实时更新和实时桌面提醒:当本页面有新的评论出现时,不用刷新页面,评论流中会自动显示新的评论,这个功能对直播和互动较强的页面特别有用。...查看统计数据:直接在WP后台可以查看多说评论统计数据,无需再到多说主站来查看 允许单篇文章或页面启用或禁用多说评论框:在文章或 Page 的编辑页面,开关文章评论的地方,新增“关闭本文多说评论”的勾选项

    80920
    领券