MySQL单表千万级数据查询优化大家怎么说(评论有亮点)
mhr18 2024-12-15 11:51 21 浏览 0 评论
题图来自APOD
上次写了一篇MySQL优化实战的文章“MySQL千万级数据从190秒优化到1秒全过程”。
这篇文章主要还是在实战MySQL优化,所以从造数据到查询SQL优化SQL都没有业务或者其它依赖,优化的技巧也不涉及软件架构就是纯SQL优化。
由于笔者经验有限和篇幅限制没有展开讲很多细节,其中有很多争议的地方也在原帖进行了回复。
通过大家的讨论学习到很多东西。有句话在技术学习这块说的挺好,“一个人走的慢,一群人走的快”。通过讨论可以发现MySQL千万数据的全貌大概是怎样的。
以下enjoy~
千万数据的信息
原帖中实际产生的数据量有1500W行数据,以下基于此说明。
名称 说明 行数 1500W 磁盘大小 字段少,接近2GB 单表查询时间 查询快 关联查询时间 查询很慢
《阿里Java开发手册》有这么一条规约:
【推荐】单表行数超过 500 万行或者单表容量超过 2GB,才推荐进行分库分表。 说明:如果预计三年后的数据量根本达不到这个级别,请不要在创建表时就分库分表。
千万级数据在互联网公司是推荐分表的。笔者从事的传统行业千万级的大表还是很常见的~
笔者由此得出“千万级数据对于MySQL来说就是不太合理的一个存在”,至于是否合理也是仁者见仁智者见智了~
怎么优化的
- 怼索引
- 怼覆盖索引
- 小表驱动大表
- 强制索引
- 减少数据量
优化技巧中,其中有的有效、有的没效果。
尤其是很多优化技巧涉及到千万级才会出现,也就是隐藏技巧,比如强制索引。最实用的还是覆盖索引。
有些技巧只是提及没有实际操作。以后会按照这种方式展展开写,欢迎关注。
大家怎么说
反向逻辑的
方向操作主要就是反PUA了,虽然写的文章水平一般,但是这波方向操作我是佩服的~ 虽然技术确实能实现需求,但常在职场主打的一个就是身心愉悦~
- 软件层面优化不了,那就交给硬件,硬件层面优化不了,那就交给人力
- 你记住代码和人有一个能跑就行
- 老板说,优化不了代码我们就优化需求,优化不了需求我们就优化客户
- 千辛万苦优化到1秒,领导来了一句:“谁让你这么改的?给我改回去!”
- 哈哈哈,甲方还没提需求,你就给我优化了,谁给钱啊
- 迟早都是Oracle收割的韭菜
- 我有5亿钱包数据,怎么优化都打不到秒出!
反对的
这个意见没毛病,千万数据在MySQL也很常见。 但是笔者在某云做过验证,配置是8核心16G内存,同样的脚本在某云MYSQL中验证最少还是需要3s+ 单机MYSQL千万数据看来确实是很多业务无法允许的瓶颈了~
- 哈哈,需求从“统计每个用户的订单总额”,变成“统计某几个用户的订单总额”,你小子是懂优化的
- 优化不了就改需求是吧?优化思路是不对的,最后输出结果都不一样了
- 抛开需求谈设计就是耍流氓...
- 最后一部分,真 到了一秒
- 单表千万数据量没什么不合理的,一次group by出所有的用户不分页才不合理。
- 那是你们家的mysql支持不了单表1000w。我们家的可以,而且速度还很好。
支持的
主打的就是实战优化技巧,希望多多输出~学习输出实战才能闭环增长呢~
- 本身这种全量查询大量数据的需求就不合理,当然是要优化业务了
- 虽然但是哈哈哈哈 但是你这个文章给出的SQL和存储过程都可以直接使用并且调试步骤都有,拿来试试玩玩涨涨操作知识也挺好的呀~ 支持~
技术类的
这部分讨论主要停留在技术层面,软件硬件优化还是有很多的,可以看出平台里面还是很多潜水大牛的~
- 我记得mysql的join缓冲区,有个设置,调大点,join效率会有明显提升
- 是的 但是一般都有自适应
- 数据库级别优化本来就是有极限的,最终都得靠应用级别优化
- 个人习惯先用小表驱动大表, 添加索引和减少数据量进行优化。因为覆盖索引添加了查询的列很多时候只优化了当下的查询,但如果有很多相类似的sql要查询就很容易创建越来越多列,查询时间又没有减少
- 千万级的数据量得用分库分表,还要用缓存,光索引是没有用的,在想啥呢
- mysql适合互联网科技服务的业务场景,就是用户只看自己的数据,联表业务场景不多的情况。要是来一个传统企业级数据场景就难搞了,比如银行流水数据,企业内部财务订单数据,几个千万级的大表级联就很慢很慢了,这时候还是推荐上oracle和sqlserver商业数据库了,再不济也得来个pg。免费mysql存储海量数据的代价是人员成本高,硬件授权虽贵,但现在开发人员工资也不低。
- 之前测试过某云的mysql,8c16g ssd 配置,1.2亿条数据 查询 23 毫秒,感觉某云有点厉害
- 同样的脚本在某云MYSQL中验证最少还是需要3s+~配置是8核心16G内存,单机MYSQL千万数据看来确实是很多业务无法允许的瓶颈了~
- 首先,MySQL千万数据,在MySQL8.0以上的版本默认配置下轻松驾驭。除非你是7年以上的老服务器,或者是虚拟机,或者你本地点测试。分区优化后,2000万性能损失也不大。隔壁部门单表5000万了,还在叠加。另外,文章整体不错,点赞!还有,分表慎用,切勿只为数据分流而分表。
- 还有物理配置也算一个
- MySQL没碰到,二十多年前,在Oracle上遇到,新系统,全系统初始化库存的时候,同事写的脚本,要执行六个小时,调整了下,大概不到二十分钟。
他山之石
文章确实还有很多完善的地方,比如硬件配置是性能测试的基准没有体现出来。
MySQL千万数据究竟大吗?结论是大但不是天花板。
不是关系型数据库的天花板也不是软件优化的天花板。
但是怎么说,MySQL作为被Oracle收购的一个开源软件,更像是一个弃子一样,所以各大云服务厂商都优化和迭代了MySQL,性能好很多~
软件的分层设计很重要,缓存、软件、代理、持久化每个环节的综合设计可以让软件很能打,平摊各个环节的取舍也就降低了风险~
关于作者
来自一线全栈程序员nine的探索与实践,持续迭代中。
欢迎评论、点赞、收藏、关注。
- 上一篇:PowerDesigner最基础的使用方法入门学习
- 下一篇:MySQL前言篇
相关推荐
- 外贸独立站卡成PPT?你可能用错了对象缓存!
-
最近帮一个上海的电子元器件客户优化网站,发现他的WooCommerce后台操作要等5秒才能响应——查了下服务器日志,MySQL查询每秒炸出200+次!原来他的"高性能"主机根本没用对象...
- 搭建N8N
-
一、概述n8n是一款强大的工作流自动化工具,它允许用户通过可视化界面创建自动化工作流,无需编写复杂代码。作为一个开源的自动化平台,N8N支持连接各种服务和应用程序,实现数据流转和任务自动化。核心特点...
- 性能优化!7个策略,让Spring Boot 处理每秒百万请求
-
首先,我需要确定这个问题的背景。可能用户是在处理高并发的系统,或者正在设计一个需要应对大流量的应用。他们的身份可能是后端开发工程师,或者是系统架构师,对性能优化有较高需求。接下来,我要想,处理百万级的...
- 定时任务优化总结(从半个小时优化到秒级)
-
整体优化思路:1.按需查询、2.分小批次游标查询、3.JED场景下按数据库分片分组更新、4.精准定位要处理的数据、5.负载均衡业务背景:站外广告投放平台在做推广管理状态优化重构的时候,引入了...
- 跨境电商建站隐藏技巧:Redis缓存,让站点“记住”用户更高效
-
用户登录后,每次刷新页面都要重新验证身份,有时候还会出现“会话丢失”,用户不得不重新登录,体验很差找我们帮忙后,我们建议用Redis缓存会话数据。简单来说,Redis就像站点的“临时记事本”,用户登...
- 服务架构性能优化与Java实现
-
服务架构性能优化大全(附Java代码实现)一、缓存核心思想:将高频访问数据存储在高速存储中,减少慢速存储(如数据库)访问场景:读多写少的数据(用户信息、配置数据)Java实现:使用Caffeine缓存...
- 百万并发不是梦!Nginx高并发优化配置与性能调优全解
-
Nginx的最大转发能力受硬件、配置和系统参数影响,处理超高并发请求时需多维度优化和扩展。以下是具体分析和解决方案:一、Nginx最大转发能力的关键因素硬件资源CPU:Nginx依赖多核CPU,...
- 面试官:工作中优化MySQL的手段有哪些?
-
MySQL是面试中必问的模块,而MySQL中的优化内容又是常见的面试题,所以本文来看“工作中优化MySQL的手段有哪些?”。工作中常见的MySQL优化手段分为以下五大类:索引优化:确保高频查...
- 万字长文|RAG优化全攻略:微服务部署+动态权重策略,代码级详解
-
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在官网-聚客AI学院大模型应用开发微调项目实践课程学习平台从理论到实践,全面解析RAG性能瓶颈与高阶优化方案。一、RAG核心架...
- 在Windows环境下,本地部署和启动开源项目Ragflow的源代码
-
在当前AI领域中,基于检索增强生成(RAG)的应用备受关注,而开源项目RAGFlow因其灵活性和功能性成为了一个热门选择。不过,由于其快速的版本迭代,可能会存在一些Bug,并且在实际项目落地时通常需要...
- 这款 .NET 9 + React 后台权限管理系统太强了!支持多租户、按钮权限(简单易用且文档齐全)
-
前言在数字化转型浪潮中,高效且安全的权限管理是后台系统的核心基石。传统方案或依赖臃肿的三方框架,或难以满足细粒度权限需求。今天推荐一款完全独立开发、基于前沿技术栈开发的RBAC权限系统。它摒弃了现成A...
- 开源声明:只是一个随便写写的管理系统(认真脸)
-
最近微信公众号和技术博客都断更了,最近2了两周时间撸了一套管理系统的脚手架。原因是因为最近项目需要用到,但是找了一圈Github或者Gitee,基本都不合适。要么有前端,配套后端是Node而...
- 「第七期」深信服go实习一面二面HR面
-
一面面试时长:1h自我介绍channel知识点协程goroutinemysql的两种存储引擎InnoDB索引redis使用单线程还是多线程?有多少个库?redis持久化有哪些?各自优势?谁更常用?P...
- Go中使用sync.Map实现线程安全的缓存
-
不依赖外部库,在Go中实现自己的线程安全缓存照片来源:PossessedPhotography在Unsplash缓存是优化现代应用程序性能的关键方面。它允许您存储并快速检索昂贵操作的结果或经常访...
- Redis中RedisTemplate 和 StringRedisTemplate
-
前言:RedisTemplate和StringRedisTemplate都是Spring提供的操作Redis的模板类,但它们之间在序列化方式和使用场景上有显著区别。序列化方式不同Redi...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- oracle位图索引 (74)
- oracle批量插入数据 (65)
- oracle事务隔离级别 (59)
- oracle主从同步 (56)
- oracle 乐观锁 (53)
- redis 命令 (83)
- php redis (97)
- redis 存储 (67)
- redis 锁 (74)
- 启动 redis (73)
- redis 时间 (60)
- redis 删除 (69)
- redis内存 (64)
- redis并发 (53)
- redis 主从 (71)
- redis同步 (53)
- redis结构 (53)
- redis 订阅 (54)
- redis 登录 (62)
- redis 面试 (58)
- redis问题 (54)
- 阿里 redis (67)
- redis的缓存 (57)
- lua redis (59)
- redis 连接池 (64)