当前位置:首页 > 文章列表 > 数据库 > MySQL > MySQL 直方图怎样删除过期统计信息

MySQL 直方图怎样删除过期统计信息

来源:17golang原创 2026-11-05 18:53:29 0浏览 收藏

MySQL 直方图过期时,不需要删除整张表的统计信息。直接对目标列执行 ANALYZE TABLE orders DROP HISTOGRAM ON amount; 即可;多个列可以放在同一条语句中。官方参考地址:https://dev.mysql.com/doc/refman/8.4/en/analyze-table.html。删除后,优化器不再使用这些列的直方图估算,但普通索引统计不会因为这条语句一起消失。

稳妥的处理顺序是:先查 COLUMN_STATISTICS 确认列上确实有直方图,再按列执行 DROP HISTOGRAM,最后根据返回状态和查询计划确认影响范围。
  • 删除对象:指定表中指定列的 histogram 统计。
  • 保留对象:同表其他列的直方图,以及普通索引的基数统计。
  • 核心语法:ANALYZE TABLE 表名 DROP HISTOGRAM ON 列名。

先分清直方图和普通索引统计

MySQL 的直方图保存在数据字典中,用户通过 INFORMATION_SCHEMA.COLUMN_STATISTICS 这个视图查看。它主要帮助优化器估算非索引列上与常量比较的选择性,例如范围、等值和 IN 条件。直方图是按列维护的,不能把“表上有索引统计”理解为“表上有直方图”。

删除前先缩小范围,避免凭感觉清理:

-- 只查看 orders.amount 当前是否有直方图
SELECT SCHEMA_NAME, TABLE_NAME, COLUMN_NAME, HISTOGRAM
FROM INFORMATION_SCHEMA.COLUMN_STATISTICS
WHERE SCHEMA_NAME = 'shop'
  AND TABLE_NAME = 'orders'
  AND COLUMN_NAME = 'amount';

如果能返回该列记录,说明它存在可管理的直方图;如果结果为空,可能是尚未创建、已经删除,或者当前账号看不到该对象。这个查询只查看直方图,不会列出 SHOW INDEX 里的普通索引统计。

MySQL 直方图与 COLUMN_STATISTICS 的列级对应关系说明图
图1:列级统计关系说明图,展示表、目标列与 COLUMN_STATISTICS 的对应范围,不是运行截图。

用 DROP HISTOGRAM 只删过期列

确定目标列后,把删除动作交给 ANALYZE TABLE 的直方图子句。它不是普通的表分析,也不是 DROP TABLE;语句中的表名只能指向一个表,列名可以写一个或多个。

-- 删除 amount 的过期直方图,其他列不受影响
ANALYZE TABLE `shop`.`orders`
  DROP HISTOGRAM ON `amount`;

-- 同时删除同一张表上两个指定列的直方图
ANALYZE TABLE `shop`.`orders`
  DROP HISTOGRAM ON `amount`, `status`;

返回结果中的 Op 通常是 histogram,成功时 Msg_type 为 status,消息会指向被移除的列。多列操作按列报告结果;某个列名不存在或不适合处理时,其他可处理列仍可能完成,不能只看客户端最后一行。

删除操作不会把表的索引、数据或列定义改掉。它只让优化器失去这份列分布摘要,因此在删除前应记录受影响查询,尤其是没有索引、依赖选择性估算的过滤条件。

MySQL DROP HISTOGRAM 删除指定列并保留其他统计对象的结构说明图
图2:删除范围说明图,突出 DROP HISTOGRAM 只作用于选中的列,并与索引统计保持边界。

删除后怎样判断处理方向

再次查询 COLUMN_STATISTICS,目标列的记录应不再出现;同表其他仍保留直方图的列可以继续返回。如果删除后执行计划变差,说明这份分布信息可能仍有价值,优先考虑重新生成而不是长期关闭:

-- 重新生成目标列的直方图,桶数按数据分布与内存预算决定
ANALYZE TABLE `shop`.`orders`
  UPDATE HISTOGRAM ON `amount` WITH 64 BUCKETS;

-- 删除后再次确认目标列已没有直方图记录
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMN_STATISTICS
WHERE SCHEMA_NAME = 'shop'
  AND TABLE_NAME = 'orders';

UPDATE HISTOGRAM 适合统计仍然有用、只是旧了的场景;DROP HISTOGRAM 适合统计误导估算、暂时不想让优化器使用的场景。只为临时实验关闭 condition_fanout_filter 会影响更广的优化行为,不应替代列级清理。

常见边界与速查

现象应先判断什么处理建议
查询为空列上没有直方图,或账号无权看到核对库表列名和权限,不要重复删除
删除后计划变化过滤条件是否依赖该列分布估算对比 EXPLAIN,必要时重新 UPDATE
想清理整个表是否真的要移除每一列的直方图显式列出列名,避免范围过大
权限报错ANALYZE TABLE 需要相应表权限让管理员按最小权限授权后再操作

相关问题

普通 ANALYZE TABLE 会删除直方图吗?

不会。没有直方图子句的 ANALYZE TABLE 主要更新表和索引相关的键分布,已有直方图不会因此自动消失。

可以一次删除不同表的直方图吗?

不能用一条 DROP HISTOGRAM 子句跨多个表。每条语句只针对一个表,按表分别执行并分别查看返回结果。

删掉直方图会删掉索引吗?

不会。它只移除列直方图统计,不改变索引定义、表数据和列结构。

版本声明
本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
MySQL 复制过滤怎样确认表规则已加载MySQL 复制过滤怎样确认表规则已加载
上一篇
MySQL 复制过滤怎样确认表规则已加载
Redis BZMPOP 怎样在阻塞时设置超时
下一篇
Redis BZMPOP 怎样在阻塞时设置超时
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • PubMedQA数据集详解:生物医学问答基准、功能与应用指南
    PubMedQA
    深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
    896次使用
  • H2O EvalGPT:开源LLM大模型评估与排行榜工具
    H2O EvalGPT
    H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
    901次使用
  • LMArena是什么?伯克利AI模型评估平台使用指南与功能解析
    LMArena
    LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
    985次使用
  • 斯坦福HELM:大语言模型Holistic Evaluation整体评估框架详解
    HELM
    深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
    972次使用
  • MMBench详解:多模态大模型基准测试、功能特点与使用指南
    MMBench
    MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
    798次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议 和 隐私政策
返回登录
  • 重置密码