千万级数据的表,我把慢sql优化后性能提升30倍!

这篇具有很好参考价值的文章主要介绍了千万级数据的表,我把慢sql优化后性能提升30倍!。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

分享技术,用心生活


背景:系统中有一个统计页面加载特别慢,前端设置的40s超时时间都加载不出来数据,因为是个统计页面,基本上一猜就知道是mysql的语句有问题,遗留了很久没有解决,正好趁不忙的时候,下定决心一定把它给搞定!


1. 分析原因

(mysql5.7)
执行一下问题sql,可以看到单表查就需要61s 这怎么能忍受?

千万级数据的表,我把慢sql优化后性能提升30倍!

通过explain看一下执行计划

千万级数据的表,我把慢sql优化后性能提升30倍!

挑重点,可以看到用命中了名为idx_first_date的索引,但是rows中扫描了1000多万行的数据,这显然是sql慢的根源。我们来查一下表数据量:

千万级数据的表,我把慢sql优化后性能提升30倍!

真真的千万级的大表!

找到原因后,那么就需要明确优化方向

  • 通过设置分区
  • 通过水平分表
  • 通过优化sql

我们大概会有以上三种思路

分区方案会有诸多限制,比如可能会索引失效,占用内存,有主键限制等,故不采纳

分表方案看来可行,通过缩小热点数据,把非热点数据全部放入分表。是可以达到效果。不过查询表写入日期后,发现最早在2021年。目前系统内查询统计还会经常用到2021年数据。如果贸然分表后,带来的连表查询,数据管理问题等,现有代码可能会出大问题。

那么就只剩下优化sql这一条路了,虽然是千万级数据的表,但是你要相信mysql是可以支撑的。

确定方向后,那就需要解决如何通过减少数据的扫描来实现提升性能。

通过sql可以看到,这个统计sql是根据日期查询的,而且也命中了索引,那么为什么还会扫描这么多数据呢?我们再去看下表的索引

千万级数据的表,我把慢sql优化后性能提升30倍!

发现猫腻了吧,idx_first_date是个联合索引,再根据上图key_len长度为67和最左匹配原则可知,mysql执行器是优先使用customer_id去扫描数据。所以几乎全表扫描了。

我们把idx_first_date修改一下联合索引的字段顺序,把first_date放在第一位,我们再来执行一下sql看下结果

千万级数据的表,我把慢sql优化后性能提升30倍!

1.6s!大呼!性能直接提升30倍!

你以为到这里就结束了吗?不不不!再看一张图

千万级数据的表,我把慢sql优化后性能提升30倍!

发现了吗,因为用了联合索引,导致索引占用空间过大,比数据占用都大。我认为这里存在滥用索引的现象。索引本身不止会占用空间,而且也会降低写入性能,维护更新索引成本过高等。

idx_first_date中的customer_id字段去掉,再看下索引占用情况

千万级数据的表,我把慢sql优化后性能提升30倍!

下降至2.6G,减少了将近1.4G的索引占用。
至此,这张千万数据的大表慢sql已优化完,不仅提升了查询性能,也减少了索引带来的空间占用过大的问题。

本文由mdnice多平台发布文章来源地址https://www.toymoban.com/news/detail-622323.html

到了这里,关于千万级数据的表,我把慢sql优化后性能提升30倍!的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MySQL千万级数据优化方案

                              ↓↓↓处理千万级数据的MySQL数据库,可以采取以下优化措施↓↓↓                                                           使用索引:确保对经常用于查询和排序的字段添加索引。不要在查询中使用SELECT *,而是明确指定需要的字段。

    2024年02月07日
    浏览(40)
  • MySQL千万级数据查询的优化技巧及思路

    随着数据量的不断增长,MySQL千万级数据查询的优化问题也日益引人注目。在这篇文章中,我们将深入探讨MySQL千万级数据查询优化的方法和技巧,以帮助开发者更好地优化MySQL性能。 数据库设计是优化查询性能的关键,以下是一些可用的技巧: 垂直拆分和水平拆分 垂直拆分

    2024年02月10日
    浏览(45)
  • 面试官:Mysql千万级大表如何进行深度分页优化?

    假如有一张千万级的订单表,这张表没有采用分区分表,也没有使用ES等技术,分页查询进行到一定深度分页之后(比如1000万行后)查询比较缓慢,我们该如何进行优化? 订单表结构如下: 其中 Mysql 版本为8.0。我们使用Python脚本向表中插入2000万条数据。 导出数据时我们需

    2024年02月19日
    浏览(46)
  • EMQX+阿里云飞天洛神云网络 NLB:MQTT 消息亿级并发、千万级吞吐性能达成

    随着物联网技术的发展与各行业数字化进程的推进,全球物联网设备连接规模与日俱增。一个可靠高效的物联网系统需要具备高并发、大吞吐、低时延的数据处理能力,支撑海量物联网数据的接入与分析,从而进一步挖掘数据价值。 于今年五月发布的 EMQX 5.0 版本全球首个实

    2023年04月15日
    浏览(47)
  • 百万级sql server数据库优化案例分享

            在我们的IT职业生涯中,能有一次百万级的数据库的优化经历是很难得的,如果你遇到了恭喜你,你的职业生涯将会更加完美,如果你遇到并解决了,那么一定足够你炫耀很多年。         这里我将要分享一次完美的百万级数据库优化经历,希望能给在IT行业的小

    2024年02月17日
    浏览(74)
  • 百万数据慢慢读?Pandas性能优化法速读百万级数据无压力

    作为数据分析工作者,我们每天都要处理大量数据,这时Pandas等工具的读取性能也就备受关注。特别是当数据集达到百万行以上时,如何提高读取效率,让数据分析工作跑上“快车道”?本文将详细分析Pandas读取大数据的性能优化方法,以及一些建议和经验。 1. 使用SQL进行预处理 可

    2024年02月09日
    浏览(48)
  • kafka千万级数据积压原因以及解决方案

    一、原因 kafka作为消息队列,其中数据积压也是经常遇到的问题之一。 我们都知道,数据积压的直接原因,一定是系统中的某个部分出现了性能问题,来不及处理上游发送的数据,才会导致数据积压。 那么我们就需要分析在使用kafka时,如何通过优化代码以及参数配置来最大

    2024年02月12日
    浏览(45)
  • 千万级数据并发解决方案(理论+实战) 高并发解决思路 方案

    课程地址 项目地址 秒杀 高并发 新闻系统 超大数据量 一般的网站 写入的少 读取的次数多 模糊查询 数据量少的时候可以用 like 数据量多的时候用 Elasticsearch搜索引擎 占用磁盘空间比较大 在laravel中 创建 要提前配置好数据库 在Tests文件中写入 运行命令 php artisan app:tests 生成

    2024年02月08日
    浏览(86)
  • 千万级并发架构下,如何进行关系型数据库的分库分表

    最近项目上线后由于用户量的剧增,导致数据库的数据量剧增,随之而来的就是海量数据存储的问题,针对最近解决数据的优化过程,谈谈sql语句的优化以及数据库分库分表的方案。 建议大家先阅读一下数据库的优化方案 《数据库大数据量的优化方案》,里面从 1.优化现有数

    2024年02月16日
    浏览(53)
  • 权威答案!灵犀医疗引入 Zilliz Cloud,千万级向量数据库赋能医学 AIGC 平台

    “医疗行业是一个信息差较大的行业,术语体系庞杂且知识门类较多,如何能搜索到最精准的医学知识并采用最合理方式进行总结,这是我们医学 AIGC 平台 EviMed 所遇见的最主要的技术问题。 传统的数据库和全文检索方式难以满足我们的技术要求,结合了 Zilliz Cloud 向量数据

    2024年04月25日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包