MySQL查询性能优化的索引潜水实例分析


先要从一件怪事说起:

我先造点数据复现一下问题,创建一张用户表:

CREATE TABLE `user` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `name` varchar(100) NOT NULL DEFAULT '' COMMENT '姓名',
  `age` int(11) NOT NULL DEFAULT 0 COMMENT '年龄',
  PRIMARY KEY (`id`),
  KEY `idx_age` (`age`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

通过一批用户年龄,查询该年龄的用户信息,并查看一下SQL执行计划:

explain select * from user 
where age in (1,2,3,4,5,6,7,8,9);

MySQL查询性能优化的索引潜水实例分析

where条件中有9个参数,重点关注一下执行计划中的预估扫描行数为279行。

到这里没什么问题,预估的非常准,实际就是279行。

MySQL查询性能优化的索引潜水实例分析

但是,问题来了,当我们在where条件中,再加一个参数,变成了10个参数,预估扫描行数本应该增加,结果却大大减少了。

explain select * from user
where age in (1,2,3,4,5,6,7,8,9,10);

MySQL查询性能优化的索引潜水实例分析

一下子减少到了30行,可是实际行数是多少呢?

MySQL查询性能优化的索引潜水实例分析

实际是310行,预估扫描行数是30行,真是错到姥姥家了。

MySQL咋回事啊,到底还能不能预估?

不能预估的话,换其他人!

大家肯定也是满脸疑惑,直到我去官网上看到了一个词语,索引潜水(Index dive) 。

跟这个词语相关的,还有一个配置参数 eq_range_index_dive_limit

Mootion Mootion

Mootion是一个革命性的3D动画创作平台,利用AI技术来简化和加速3D动画的制作过程。

Mootion 232 查看详情 Mootion

MySQL5.7.3之前的版本,这个值默认是10,之后的版本,这个值默认是200。

可以使用命令查看一下这个值的大小:

show variables like '%eq_range_index_dive_limit%';

MySQL查询性能优化的索引潜水实例分析

当然,我们也可以手动修改这个值的大小:

set eq_range_index_dive_limit=200;

这个 eq_range_index_dive_limit 配置的作用就是:

当where语句in条件中参数个数小于这个值的时候,MySQL就采用索引潜水(Index dive) 的方式预估扫描行数,非常准确。

当where语句in条件中参数个数大于等于这个值的时候,MySQL就采用另一种方式索引统计(Index statistics) 预估扫描行数,误差较大。

MySQL为什么要这么做呢?

都用索引潜水(Index dive) 的方式预估扫描行数,不好吗?

其实这是基于成本的考虑,索引潜水估算成本较高,适合小数据量。索引统计估算成本较低,适合大数据量。

一般情况下,我们的where语句的in条件的参数不会太多,适合使用索引潜水预估扫描行数。

建议还在使用MySQL5.7.3之前版本的同学们,手动修改一下索引潜水的配置参数,改成合适的数值。

如果你们项目中in条件最多有500个参数,就把配置参数改成501。

这样MySQL预估扫描行数更准确,可以选择更合适的索引。

以上就是MySQL查询性能优化的索引潜水实例分析的详细内容,更多请关注其它相关文章!


# 还能  # 一周热议关键词排名  # 山西seo排名团购平台  # 地方网站建设论文模板  # 商丘附近网站建设企业招聘  # 温县网站建设招聘  # 未备案网站推广  # 四川旅游网站建设  # 网站seo推广制造商  # 展馆网站建设  # 网站运营与推广的策略  # MySQL  # 最多  # 还在  # 太多  # 来了  # 这是  # 是一个  # 如何设置  # 行数  # 镜像 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: 泰拉瑞亚水晶无法放置问题  申通快件单号查询平台 申通包裹物流动态跟踪  使用Python和GBGB API高效抓取指定日期范围和赛道比赛结果教程  Fedora怎么安装 Fedora Workstation安装步骤  作业帮网页版不用下载入口 在线问老师快速答疑  Composer如何使用composer-plugin-api开发自定义插件  悟空浏览器如何恢复关闭的标签页 悟空浏览器撤销关闭网页快捷键设置  鸣潮历史学家灯塔位置一览  ExcelSCAN与LAMBDA如何创建自定义移动平均函数_SCAN实现任意窗口期移动平均计算  J*aScript字符串_Unicode处理  《随手记》启用语音备注方法  知音漫客官网首页入口_知音漫客热门漫画推荐  《鹿路通》退余额方法  外媒评《燕云十六声》DIY载具新玩法:很像《塞尔达传说王国之泪》!  《原神》月之一版本新增书籍一览  《百果园》充值余额方法  菜鸟驿站的取件码忘了怎么办 手机快速查询指南  百度小说看书时如何翻页_百度小说手动翻页与自动翻页设置  J*aScript大数运算_BigInt使用指南  韩剧圈正版官网入口_韩剧圈官方指定登录  OPPO手机参数配置如何开启护眼模式_OPPO手机参数配置护眼模式开启指南  《海底捞》点外卖方法  抖音手机分身两个账号怎么切换?分身两个系统是一样的吗?  PHP魔术方法__set与__isset:设计考量、性能权衡与静态分析的视角  qq邮箱怎么注册_QQ邮箱注册步骤与注意事项  智云Q3和Q2有什么升级_智云Q3与Q2手持云台功能与性能对比分析  pubmed数据库官方主页_pubmed学术论文查找官网直达  网页版网易云音乐入口_网易云音乐在线官网登录  Lar*el 关联查询:同时筛选父表与子表数据的高效策略  mysql如何管理数据库账户_mysql数据库账户管理技巧  win11如何开启单声道音频 Win11为听障用户合并左右声道【辅助】  vivo浏览器怎么离线保存网页 vivo浏览器下载完整页面以便无网络时阅读  DeepSeek超全面指南:入门必看  深入理解随机递归函数的确定性:内部节点、叶节点与时间复杂度分析  C++ optional用法详解_C++17处理可能为空的返回值  MongoDB聚合管道:高效统计列表中各项的文档数量  《红果免费短剧》下载观看方法  263企业邮箱如何设置邮件转发功能  海棠阅读登录教程_详细讲解海棠登录操作  mysql触发器如何编写_mysql触发器编写规范与代码示例讲解  《小黑盒》删除历史浏览方法  Sublime怎么配置YAML文件格式化_Sublime YAML Formatter插件教程  VS Code快捷键when上下文子句的妙用  如何测试您的网站全球打开速度-网站海外测速工  PHP中获取HTTP响应状态消息:方法与限制  如何在CSS中实现盒模型多列间距_grid-gap与padding结合  Word如何将文字快速转成表格 Word文本转换成表格功能使用技巧【效率】  《搜书吧》阅读书籍方法  有道AI翻译入口 智能写作官方网站入口  b站如何管理订阅_b站订阅标签分类管理 

 2023-06-03

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.