MySQL源码学习:索引使用统计功能

今天刚刚知道Oracle有个索引统计的功能,可以统计每个索引的使用次数。作为一个Oracle的门外汉,我还是再次感叹人家做的是真细致。第二个想法就是给MySQL也加上。

Percona版本的information_schema.innodb_index_stats 已经有索引的统计信息,我们就在巨人的肩膀上踩一脚了。

先来看下原来的表结构。

CREATE TEMPORARY TABLE `INNODB_INDEX_STATS` (

  `table_schema` varchar(192) NOT NULL DEFAULT '',

  `table_name` varchar(192) NOT NULL DEFAULT '',

  `index_name` varchar(192) NOT NULL DEFAULT '',

  `fields` bigint(21) unsigned NOT NULL DEFAULT '0',

  `rows_per_key` varchar(256) NOT NULL DEFAULT '',

  `index_total_pages` bigint(21) unsigned NOT NULL DEFAULT '0',

  `index_leaf_pages` bigint(21) unsigned NOT NULL DEFAULT '0'

) ENGINE=MEMORY DEFAULT CHARSET=utf8

 

记录的是每个索引的信息,其中index_total_pages是一个索引的所有page数,index_leaf_pages其中的叶子page数。从这两个数据基本上可以描绘一棵btree的大小了。从其中的比例关系也可以看到为什么亿级别的数据只要三层索引了,这是题外话。

 

然后我们要作的事情就是在这个“表”加一列,统计索引被使用的次数。其中的信息当然需要在执行时统计。所幸的是InnoDB每次使用索引都是统一的入口(index_read), 就在index里面加个字段统计。如果要精确还得加个锁,不过作为统计信息,也可以不要那么精确,直接累积了,这样对性能就没有影响。

修改后就长这样了。

总共修改代码没有超过10行,看上去还有点儿意思吧 。基于Percona-Server-5.5.8-20.0改的,有在使用这版本的需要patch的可以留下邮箱。

如何排查MySQL是否走索引 EXPLAIN是分析SQL语句执行计划的关键工具,可以查看MySQL是否使用了索引。 阅读详情

相关推荐

MySQL 的 `GROUP BY` 是如何使用索引的?

在数据查询与分析中,GROUP BY是实现数据聚合的核心工具,广泛应用于统计报表、多维分析、业务监控等场景。然而,当面对百万级甚至亿级数据时,未优化的GROUP BY查询往往成为性能瓶颈——全表扫描、临时表创建、文件排序等操作可能导致查询耗时从毫秒级飙升至分钟级。为什么同样的GROUP BY查询,在某些情况下能瞬间返回结果,而在其他情况下却异常缓慢?索引在其中扮演了怎样的关键角色?本文将围绕“MySQL的GROUP BY如何使用索引”这一核心问题,从底层原理到实战优化展开深入探讨。我们将系统讲解。

AI天才研究院 421

mysql源码索引_MySQL源码学习:索引使用统计功能

今天刚刚知道Oracle有个索引统计的功能,可以统计每个索引的使用次数。作为一个Oracle的门外汉,我还是再次感叹人家做的是真细致。第二个想法就是给MySQL也加上。Percona版本的information_schema.innodb_index_stats 已经有索引的统计信息,我们就在巨人的肩膀上踩一脚了。先来看下原来的表结构。CREATETEMPORARYTABLE`INNODB_...

weixin_39603598的博客 176

基于Java+JSP+MySQL的电子健康档案系统毕业设计源码解析

JavaWeb开发是许多编程学习者的必经之路,其中JSP与Servlet作为经典技术栈,承担着页面渲染与请求控制的核心职责。理解HTTP请求如何穿越浏览器、服务器与数据库,是掌握后端工程实践的关键。MySQL作为关系型数据库的常用选择,与JDBC配合实现数据的持久化存储。在医疗信息化场景中,电子健康档案系统的构建涵盖用户管理、档案增删改查、模糊搜索等典型需求,成为高校毕业设计的高频选题。本文从技术选型出发,剖析JSP+Servlet+MySQL的工程结构、数据库表设计、核心模块实现及部署常见问题,帮助读者快

weixin_31292729的博客 102

mysql源码索引_MySQL源码学习:索引使用统计功能-阿里云开发者社区

今天刚刚知道Oracle有个索引统计的功能,可以统计每个索引的使用次数。作为一个Oracle的门外汉,我还是再次感叹人家做的是真细致。第二个想法就是给MySQL也加上。Percona版本的information_schema.innodb_index_stats 已经有索引的统计信息,我们就在巨人的肩膀上踩一脚了。先来看下原来的表结构。CREATE TEMPORARY TABLE `INNODB_...

weixin_42361175的博客 79

产业园区运营负责人如何实现创新资源的系统化配置?.docx

产业园区运营负责人如何实现创新资源的系统化配置?

基于云盾构建等保三级Web安全体系:从合规要求到实战落地

网络安全等级保护(等保)是保障信息系统安全的重要制度,其核心原理是通过分级防护、动态调整的策略,构建纵深防御体系。在技术层面,等保要求覆盖物理环境、通信网络、区域边界、计算环境和安全管理中心等多个层面,旨在通过技术和管理相结合的方式,有效应对网络攻击和数据泄露风险。对于Web应用而言,满足等保三级要求具有极高的技术价值,它不仅是合规的刚性需求,更是提升业务系统整体安全水位、建立用户信任、保障业务连续性的关键工程实践。在云计算时代,利用云原生安全服务(如Web应用防火墙WAF、云安全中心、态势感知等)可以高效

weixin_29324877的博客 308

mysql ttl索引_MySQL源码:索引相关的数据结构(前篇)_MySQL - key

...dis->ping(); //检查是否还再链接,[+pong]$redis->ttl('key');//查看失效时间[-1 | timestamps]$redis->persist('key');//移除失效时间[ 1 | 0]$redis->sort('key',[$array]);//返回或保存给定列表、集合、有序集合key中经过...本文将尝试介绍MySQL索引...

weixin_33437453的博客 588

滤波器初步入门(非常全面)

主要关注的是-3dB这个点,-3dB就是截止频率所对应的点,我们把功率降至50%以下的信号定义为被衰减掉了(但要跟实际情况相结合,有些信号衰减-3db不够,需要衰减更多)-3dB这个点对应我们的电压来说是0.707。设计电路可以留一定的余量,如果你把4k设计为截止频率,那么4k时候衰减倍数为-3dB通常是不够的,你可以将截止频率设为2k,那么4k的衰减就可以达到15dB(假设),根据自己的需要去设计对应的截止频率。理想的滤波器是当输入的信号频率大于截止频率时,大于部分的频率对应的电压信号直接归0。

yybyybds的博客 5720

mysql源码索引_MySQL源码:索引相关的数据结构

本文将尝试介绍MySQL索引存储相关的数据结构。程序=数据结构+算法,了解数据结构,然后就可以进一步了解MySQL源码中如何使用索引,如何选择自己的执行计划。1. MySQL如何描述某个数据表的索引MySQL使用TABLE对象来描述一个数据表,那么数据表的索引是如何描述,索引的统计信息又是如何存储的呢? 例如我们有如下数据表:CREATE TABLE `users` ( `id` int(11) ...

weixin_29001423的博客 284

从零开始:在Windows WSL中搭建Openfoam7+blastfoam2.0.0开发环境(避坑大全)

本文详细指导在Windows WSL中搭建OpenFOAM 7与BlastFOAM 2.0.0开发环境,重点解析了安装过程中的常见“坑点”,如编译模式不匹配导致的符号错误,并提供了从系统准备、软件部署到环境验证的完整解决方案,帮助开发者高效构建CFD与爆炸模拟开发平台。

stem5的博客 527

V.PhyloMaker实战:从物种列表到维管束植物系统发育树的完整流程

本文详细介绍了使用V.PhyloMaker工具包,从物种列表快速构建维管束植物系统发育树的完整实战流程。内容涵盖R包安装、物种名标准化、核心函数phylo.maker的三种构建方案选择、结果树的可视化与导出,以及与picante包的联动分析,为生态学和生物地理学研究提供了高效解决方案。

weixin_29057237的博客 379

科普文:软件架构数据库系列之【详解MySQL索引:执行SQL如何选择索引】

MySQL使用采样统计的方法,会选出N个数据页,每个数据页大小16kb,接着统计选出来的数据页上的不同值就会得到一个平均值,用平均值在乘以索引的页面数得到的结果就是这个索引的基数。但别误解force index的使用方法,之前在代码中看到这样一个案例,给查询列使用了函数操作导致使用不上索引,然后这哥们就直接使用force index,肯定不行的哈!优化器选择了错误的索引,只用force index来快速矫正,再通过优化SQL语句来引导优化器选择正确的索引,最暴力的手法是直接删除误选的索引。

为无为,事无事,味无味。 1062

【Pix4d精品教程】Pix4d中央子午线细化设置(测区跨两个分带)

本文介绍了在Pix4d软件中通过修改中央子午线设置来解决跨分带测区刺点问题的方法。针对测区跨3度分带(如105°和108°之间)时像控点与靶标点偏移较大的情况,建议将中央子午线设为测区中心(如106.5°)。具体操作步骤包括:修改投影文件中的中央子午线参数,选择新的输出坐标系配置文件。该方法能有效提高像控点刺点效率,为航测内业数据处理提供便利。操作简单实用,适合大比例尺测图项目中跨分带测区的数据处理需求。

智慧空间实验室 5527

php mysql网站统计源码_PHP+MYSQL访问统计系统PHP

功能包括:统计功能:综合统计,最近访问,年报表,月报表,周报表,日报表,历史报表,区域分析分析功能:地址分析,IP地址,链接页面,访问次数,操作系统,浏览器,屏幕巨细维护功能:密码修改,当区域选择,IP刷新网页时间间隔设置,计数器位数设定,每页数据项数设定,统计重置功能PHP+MYSQL访问统计系统(2 folders, 45 files, 2.30 MB, 2.30 MB in total.)...

weixin_29557763的博客 1009

openclaw通俗入门系列6——记忆系统

记忆 = 智能体的笔记本,分长期(MEMORY.md)和每日(memory/日期.md)。只有写到文件里的才能记住!支持语义搜索(理解意思)+ 关键词搜索,还能自动在压缩前保存重要内容。

m0_60605453的博客 403

QGis二次开发 —— 1、win10/win11搭建Vs2017-QGis3.40.12环境(附Vs2017环境效果,附全部问题解决方法)(附:Qt助手加入QGis接口说明文档)

QGis二次开发 —— 1、Windows10搭建Vs2017-QGis环境(附Vs2017环境效果)(附:Qt助手加入QGisA接口说明文档)

1362

MySQL扫描行数会影响索引选择(坑别踩)

学习技术一定要制定一个明确的学习路线,这样才能高效的学习,不必要做无效功,既浪费时间又得不到什么效率,大家不妨按照我这份路线来学习。大家不妨直接在牛客和力扣上多刷题,同时,我也拿了一些面试题跟大家分享,也是从一些大佬那里获得的,大家不妨多刷刷题,为金九银十冲一波!《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!大家不妨直接在牛客和力扣上多刷题,同时,我也拿了一些面试题跟大家分享,也是从一些大佬那里获得的,大家不妨多刷刷题,为金九银十冲一波!

radcb55226的博客 691

基于YOLOv5s的RK3588多线程部署16FPS暴涨到120FPS 轻量化深度学习部署实战教程(包括性能优化与加速)37

本文介绍了如何在RK3588平台上利用线程池优化YOLOv5模型的推理性能。RK3588内置3个NPU核心,支持多核并行处理。作者设计了一个线程池架构:1个线程负责数据读取,10个线程处理NPU运算,1个线程输出结果。该架构包含任务队列、线程管理和工作线程三个核心组件,通过合理设置线程数、任务队列大小等参数确保性能稳定。文章提供了详细的C++实现代码,包括线程池初始化、任务提交、结果获取等功能模块,并讨论了多线程同步和内存管理的关键技术要点。该方案可显著提升深度学习模型在嵌入式设备上的部署效率。

FJN110的博客 9230

5.7mysql删除索引,MySQL 频繁删除导致的索引选择错误

问题描述线上出现一个根据索引update字段,却出现全表扫描,并锁定表的case。监控显示现象1. 慢查询日志中出现# Query_time: 424.767255 Lock_time: 0.000029 Rows_sent: 0 Rows_examined: 142439284SET timestamp=1515479326;UPDATE `Table_XXX` SET `Field_XXX` ...

weixin_32227927的博客 855

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

MySQL复合索引

复合索引是指在数据库表上同时包含两个或更多列的索引。它们对于优化涉及这些列的查询非常有效,特别是当这些列常常在查询条件(如WHERE子句)、排序(ORDER BY子句)和连接(JOIN条件)中使用时。

qq_43012298的博客 3333

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

mysql数据库索引使用_MySQL数据库定义MySQL索引使用分析

如何理解MySQL 数据库?MySQL 有哪些优势?MySQL中索引为何物?MySQL 的索引有哪些类型?在使用索引时又该注意哪些问题?如果有伙伴想要详细了解上述问题,要仔细阅读本篇文章哦。在定义MySQL 数据库之前,我们先介绍下什么是数据库,所谓数据库就是存储数据的仓库,为了方便数据的存储和管理,将数据按照拟定的规律存储在磁盘上。再通过数据库管理系统有效地组织和管理储存在数据库内的数据。MyS...

weixin_31108679的博客 146

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

分享几个索引创建的小 Tips(非常详细),零基础入门到精通,看这一篇就够了

分享几个索引创建的小 Tips(非常详细),零基础入门到精通,看这一篇就够了

2302_76672693的博客 1027

MySQL InnoDB 排序索引构建

作者简介:大家好,我是码炫码哥,前中兴通讯、美团架构师,现任某互联网公司CTO,兼职码炫课堂主讲源码系列专题代表作:《jdk源码&多线程&高并发》,《深入tomcat源码解析》,《深入netty源码解析》,《深入dubbo源码解析》,《深入springboot源码解析》,《深入spring源码解析》,《深入redis源码解析》等联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬。

smart_an的专栏 756

【MySQL技术内幕】30-B+树索引的使用

作者简介:大家好,我是码炫码哥,前中兴通讯、美团架构师,现任某互联网公司CTO,兼职码炫课堂主讲源码系列专题代表作:《jdk源码&多线程&高并发》,《深入tomcat源码解析》,《深入netty源码解析》,《深入dubbo源码解析》,《深入springboot源码解析》,《深入spring源码解析》,《深入redis源码解析》等联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬。

smart_an的专栏 965

MySQL索引失效的10种场景与优化(持续更新)

源码分析:sql/range_optimizer/range_optimizer.cc中的get_key_for_range_scan函数检查复合索引的可用性,未命中前导列会跳过索引。源码分析:sql/sql_select.cc中的get_key_scans_params函数评估索引可用性,函数操作会使key_map标记索引不可用。源码:sql/sql_optimizer.cc中的optimize函数协调优化过程,get_key_scans_params评估索引可用性。

专注于前沿技术的探索与实践,热衷于从代码逻辑、架构设计到行业应用等多维度深挖技术本质。期待在技术之路上与你共同成长~ 979
上一篇: MySQL源码学习:关于慢查询日志中的Rows_examined=0
下一篇: MySQL“异象”分析:备库的io util比主库重?
iteye_621
博客等级 码龄8年 12粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值