MySQL千万级数据的表如何优化

小小小小柚子 秀才 2022-01-26 10:08:23

 MySQL为了提升性能,会将表的索引装载到内存中。但是当表的数据到达一定的量的时候,会导致内存无法存储这些索引,无法存储索引,就只能进行磁盘IO,从而导致性能下降。

实战调优

我这里有张表,数据有1000w,目前只有一个主键索引

复制

CREATE TABLE `user` ( 
  `id` int(10) NOT NULL AUTO_INCREMENT, 
  `uname` varchar(20) DEFAULT NULL COMMENT '账号', 
  `pwd` varchar(20) DEFAULT NULL COMMENT '密码', 
  `addr` varchar(80) DEFAULT NULL COMMENT '地址', 
  `tel` varchar(20) DEFAULT NULL COMMENT '电话', 
  `regtime` char(30) DEFAULT NULL COMMENT '注册时间', 
  `age` int(11) DEFAULT NULL COMMENT '年龄', 
  PRIMARY KEY (`id`) 
) ENGINE=InnoDB AUTO_INCREMENT=10000003 DEFAULT CHARSET=utf8; 

查询所有大概16s。可谓是相当慢了。通常我们一个后台系统,比如这个是一个电商平台,这个是用户表。后台管理系统,一般会查询这些用户信息,做一些操作,比如后台直接新增用户啊,或者删除用户啊这些操作。

所以这里就诞生了两个需求,一个是查询count,一个是分页查询

我们分别来测试一下count用的时间和分页查询所用的时间

复制

select * from user limit 1, 10   //几乎不用时 
select * from user limit 1000000, 10  //0.35s 
select * from user limit 5000000, 10  //1.7s 
select * from user limit 9000000, 10  //2.8s 
select count(1) from user  //1.7s 

从上面查询所用时间可以看出来,如果是分页查询的话,查询的数据越往后用时是越长的,查询count也需要1.7s。这显然是不符合我们的要求的。所以,这里我们就需要优化。首先我们在这里进行索引优化试试

首先看一下这是只有主键索引的执行计划:

复制

alter table `user` add INDEX `sindex` (`uname`,`pwd`,`addr`,`tel`,`regtime`,`age`) 

看上面的执行计划,虽然type是从all->index,走了sindex索引,但是实际上查询速度并没有发生改变。

其实,创建联合索引,是为了有条件查询的时候速度更快,而不是全表查询

复制

select * from user where uname='6.445329111484186' //3.5s(无联合索引) 
select * from user where uname='6.445329111484186' //0.003s(有联合索引) 

所以这就是有联合索引和无索引的差距

这里基本上可以证明,加了索引和不加索引,进行全表查询的时候,效率就是会很慢

既然索引这个结果已经不好使了,那就只能找其他方案了。根据我之前mysql面试里面讲的,count我们可以单独存储到一个表里面

复制

CREATE TABLE `attribute` ( 
  `id` int(11) NOT NULL, 
  `formname` varchar(50) COLLATE utf8_bin NOT NULL COMMENT '表名', 
  `formcount` int(11) NOT NULL COMMENT '表总数据', 
  PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; 

  

这里说一下,这种表一般不会查所有,只会查询一条,所以建表的时候,可以建成hash

复制

select formcount from attribute where formname='user' //几乎不用时 

    count就进行优化完了。如果上面有选择条件的话,就可以建立索引,通过走索引筛选的形式来查询,这样就可以不用读这个count了。

    那么,count是没问题了,分页查询优化要如何优化呢?这里可以使用子查询来优化

    复制

    select * from user where 
    id>=(select id from user limit 9000000,1) limit 10 //1.7s
    

    其实子查询这种写法,判断id,其实就是通过覆盖索引来查询。效率会大大增加。不过我这里测试是1.7s,以前在公司优化这方面的时候,比这个查询时间要低,大家也可以自己生成数据自己测试

    但是如果说数据量太大了,我还是建议走es或者进行一些默认选择,count可以单独列出来

    至此,一个千万级的数据分页查询的优化就完成了。

     

    ...全文
    585 1 打赏 收藏 转发到动态 举报
    写回复
    用AI写文章
    1 条回复
    切换为时间正序
    请发表友善的回复…
    发表回复
    CSDN-Ada助手 2023-01-13
    • 打赏
    • 举报
    回复
    您可以前往 CSDN问答-大数据 发布问题, 以便更快地解决您的疑问
    内容概要:本文围绕“配电网两阶段鲁棒故障恢复”展开研究,基于Matlab代码实现了针对配电网在故障情况下的恢复策略建模与仿真。研究采用两阶段鲁棒优化模型,有效应对系统中诸如负荷波动、分布式电源出力不确定性等扰动因素,提升配电网运行的韧性与可靠性。第一阶段制定预恢复方案,第二阶段根据实际故障场景动态调整决策,确保恢复方案的适应性与鲁棒性。该研究属于高水平期刊论文复现项目,技术路线严谨,参考了IEEE顶刊相关研究成果,并提供了完整的Matlab代码、仿真模型与网盘资源支持,涵盖YALMIP建模工具与Cplex求解器的应用。; 适合人群:具备电力系统分析基础与Matlab编程能力,从事智能电网、配电网优化、故障恢复、鲁棒优化等方向的研究生、科研人员及工程技术人员。; 使用场景及目标:①用于复现IEEE顶刊级别的两阶段鲁棒优化模型;②为配电网故障恢复、不确定性建模与鲁棒调度研究提供技术参考;③支撑科研项目申报、论文写作及仿真验证工作; 阅读建议:建议读者通过提供的网盘链接下载完整代码资源,结合文档逐步运行与调试程序,重点关注两阶段鲁棒模型的数学建模过程、列约束生成算法(C&CG)的实现逻辑,以及YALMIP与Cplex的协同使用方法,同时对照相关高水平论文深入理解其理论基础与创新点。
    已经博主授权,源码转载自 https://pan.quark.cn/s/5ef723247c66 ### FM17550硬件设计指南知识点解析#### 一、产品综述##### 1.1 产品简介FM17550是一款专为在13.56MHz频率下运行的集成度高的非接触式读写芯片。该芯片能够兼容多种国际性标准的工作模式,涵盖ISO/IEC14443 Type A/MIFARE协议、Felica协议、ISO/IEC14443 Type B协议以及NFC IP-1协议等,这些功能使其能够适用于广泛的非接触式数据交换环境。- **读写器功能**:兼容ISO/IEC14443 Type A/MIFARE协议和Felica协议,适用于数据读写应用;- **卡片仿真功能**:兼容ISO/IEC14443 A/MIFARE协议及Felica协议的卡片仿真模式,可用于进行卡片模拟通信;- **NFC操作模式**:兼容NFC IP-1协议的NFC操作模式,完成近场通信任务。除此之外,FM17550还配备了一种低能耗的外部卡片探测功能,特别适用于电池供电的读写设备,能够在低能耗条件下持续监控射频区域内的卡片进出情况。##### 1.2 产品特性FM17550拥有多样化的特性与功能,包括:- 兼容ISO/IEC14443 Type A/B协议,满足不同应用环境的需求;- 提供MIFARE加密功能,确保信息安全;- 兼容多种通信速度,例如ISO14443 TYPE A支持106kbps、212kbps、424kbps、848kbps等速度;- 兼容基于FeliCa协议的不同速度,如212kbps和424kbps;- 兼容NFC IP-1协议,最高通信速度可达424kbps;- 读写操作距离可达50mm,...
    内容概要:本文系统性地从数据驱动视角综述了具身智能中视觉-语言-动作(VLA)模型的研究进展,重点围绕三大核心要素——数据集、基准测试与数据引擎展开分析。文章提出统一的数据中心分类体系,揭示当前VLA领域在征对齐、多模态监督、推理评估和可扩展数据生成方面面临的四大开放挑战。研究明,未来突破的关键不在于模型架构本身,而在于协同设计高保真数据基础设施与结构化评估协议,尤其需要解决真实感与可扩展性的根本矛盾。作者还发布了持续更新的资源库以支持社区发展。; 适合人群:从事机器人学习、具身人工智能、计算机视觉与自然语言处理交叉领域的研究人员及工程技术人员,尤其是关注数据构建、模型评估与仿真系统的研究生和从业者。; 使用场景及目标:①理解VLA数据集在真实世界与合成数据间的权衡及其对泛化能力的影响;②掌握现有基准测试在长视野推理与组合任务评估中的局限性;③探索视频重建、硬件辅助与生成式数据引擎的技术路径与瓶颈;④指导未来VLA系统在物理真实性与数据规模之间的协同优化设计。; 阅读建议:此资源强调将数据基础设施视为首要研究问题,建议读者结合文中提出的三维度框架(数据集-基准-数据引擎)进行批判性思考,并重点关注跨平台对齐、长期推理评测与生成模型物理可信度等前沿议题,在实际研究中推动数据与模型的联合创新。

    81,529

    社区成员

    发帖
    与我相关
    我的任务
    社区描述
    汇集数据库的爱好者和关注者,大家共同学习、探索、分享数据库前沿知识和技术,像松鼠一样剥开科学的坚果;交流Gauss及其他数据库的使用心得和经验,互助解决问题,共建数据库技术交流圈。
    数据库数据仓库 企业社区 北京·海淀区
    社区管理员
    • Gauss松鼠会
    加入社区
    • 近7日
    • 近30日
    • 至今
    社区公告

    欢迎大家同时关注Gauss松鼠会专家酷哥。

    https://www.zhihu.com/people/ku-ge-78-98

    试试用AI创作助手写篇文章吧