MySQL 结构的优化方案

主要是指三方面,即表结构、字段结构以及索引结构,这些结构如果不合理,在某些场景下也会影响数据库的性能,因此优化时也可以从结构层面出发。一般在项目的库表设计之初就要考虑,当性能瓶颈出现时再调整结构,就为时过晚。

1. 表结构的优化

表结构设计时字段数量一定不要太多,InnoDB引擎基本上都会将数据操作放到内存中完成,一张表的字段数量越多,能载入内存的数据页会越少,当操作时数据不在内存,又不得不去磁盘中读取数据,这显然会很大程度上影响MySQL性能。

表结构的设计,正常情况下应当遵循《数据库三范式》的原则设计,尽可能的根据业务将表结构拆分的更为精细化,一方面确保内存中缓存的数据更多,更便于维护,而且执行SQL时,效率也会越高。

主键选择要合适,一张表中必须要有主键且最好是顺序递增的。一张表如果业务中自带自增属性字段,最好选择这些字段作为主键。没有可以设计一个与业务无关、无意义的数值序列。

对实时性要求不高的数据建立中间表。很多时候为了统计一些数据时,都会基于多表做联查,以此来确保得到统计所需的数据,对于实时性的要求不高,可以在库中建立相应的中间表,然后每日定期更新中间表的数据,从而减小联表查询的开销,同时也能进一步提升查询速度。

根据业务特性为不同的表选择合适的存储引擎,主要在InnoDB、MyISAM之间做选择。经常查询,很少发生变更的表可以选择MyISAM引擎。其他表可以使用默认的InnoDB引擎。

2. 字段结构的优化

设计表时选择合适的数据类型

  • 姓名字段,一般都会限制用户名长度,不要无脑用varchar,使用char类型更好。
  • 一些显然不会拥有太多数据的表,主键ID的类型可以从int换成tinyint、smallint、mediumit。
  • 日期字段,不要使用字符串类型,更应该选择datetime、timestamp,一般情况下最好为后者。
  • 一些固定值的字段,如性别、状态、省份、国籍等字段,可以选择使用数值型代替字符串,如果必须使用字符串类型,最好使用enum枚举类型代替varchar类型。

总之保持三个原则

  1. 足够的使用范围内选择最小的数据类型,它们占用更少的磁盘、内存、和CPU缓存,处理速度也会更快
  2. 避免索引字段值为NULL,字段空值过多会影响索引性能
  3. 尽量使用简单的类型代替复杂的类型,如IP的存储可以使用int而并非varchar,因为简单的数据类型,操作时通常需要的CPU资源更少。

3. 索引结构的优化

根据业务创建更合适的索引,主要从4个方面考虑:

  1. 一个表需要建立多个索引,适当根据业务将多个单列索引组合成一个联合索引,可以节省磁盘空间,能够充分使用索引覆盖的方式查询数据,一定程度上提升数据库的整体性能。
  2. 值较长的字段尽量建立前缀索引,索引字段值越小,单个B+Tree的节点中能存储的索引键会越多,索引树会越矮,查询性能自然越高。
  3. 经常做模糊查询的字段,可以建立全文索引代替普通索引,基于普通索引做like查询会导致索引失效,而采用全文索引的方式做模糊查询效率会更高更快,并且全文索引的功能更为强大。
  4. 索引结构的选择根据业务进行调整,在某些不做范围查询的字段上建立索引时,可以选用hash结构代替B+Tree结构,Hash结构的索引是所有数据结构中最快的,散列度足够的情况下,复杂度仅为O(1)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/774891.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【C++航海王:追寻罗杰的编程之路】关联式容器的底层结构——AVL树

目录 1 -> 底层结构 2 -> AVL树 2.1 -> AVL树的概念 2.2 -> AVL树节点的定义 2.3 -> AVL树的插入 2.4 -> AVL树的旋转 2.5 -> AVL树的验证 2.6 -> AVL树的性能 1 -> 底层结构 在上文中对对map/multimap/set/multiset进行了简单的介绍&…

C++基础21 二维数组及相关问题详解

这是《C算法宝典》C基础篇的第21节文章啦~ 如果你之前没有太多C基础,请点击👉C基础,如果你C语法基础已经炉火纯青,则可以进阶算法👉专栏:算法知识和数据结构👉专栏:数据结构啦 ​ 目…

短视频父亲:成都柏煜文化传媒有限公司

短视频父亲:镜头背后的温情与力量 在这个信息爆炸的时代,短视频以其短小精悍、直观生动的特点,迅速占据了人们碎片化的时间,成为情感交流与文化传播的重要平台。而在这些纷繁复杂的短视频中,有一类内容尤为触动人心—…

如何让自动化测试更加灵活简洁?

简化的架构对于自动化测试和主代码一样重要。冗余和不灵活性可能会导致一些问题:比如 UI 中的任何更改都需要更新多个文件,测试可能在功能上相互重复,并且支持新功能可能会变成一项耗时且有挑战性的工作来适应现有测试。 页面对象模式如何理…

ELK日志系统和Filebeat采集器的学习总结

ELK是ElasticSerach、Logstash、Kina Logstash负责采集数据,Logstash有三个插件,input、filter、output,filter插件作用是对采集的数据进行处理,过滤的,因此filter插件可以选,可以不用配置。 ElasticSear…

ASUS/华硕枪神5 G533Q G733Q系列 原厂win10系统 工厂文件 带F12 ASUS Recovery恢复

华硕工厂文件恢复系统 ,安装结束后带隐藏分区,一键恢复,以及机器所有驱动软件。 系统版本:Windows10 原厂系统下载网址:http://www.bioxt.cn 需准备一个20G以上u盘进行恢复 请注意:仅支持以上型号专用…

Facebook广告被拒:常见原因以及避免屏蔽的方法

大多数情况下,广告被屏蔽是因为违反了规则,这不仅仅是因为审核因素。有些规则并不明显,也没有在任何地方指定。例如,在广告中使用广告政策中未列出的停用词;审核算法确定照片描绘的模特过于暴露。下面小编将为你介绍Fa…

鸿蒙系统的开发与学习

1.开发工具的下载 DevEco Studio-HarmonyOS Next Beta版-华为开发者联盟 安装、环境配置时,建议 自定义目录 注意:路径中不要有 中文、特殊字符。 2.ArkTS基础总结 1)三种数据类型 ① string 字符串:描述信息 ② number 数…

【MySQL】mysql访问

mysql访问 1.引入MySQL 客户端库2.C/C 进行增删改3.查询的处理细节4.图形化界面访问数据库4.1下载MYSQL Workbench4.2MYSQL Workbench远程连接数据库 点赞👍👍收藏🌟🌟关注💖💖 你的支持是对我最大的鼓励&a…

数据特征采样在 MySQL 同步一致性校验中的实践

作者:vivo 互联网存储研发团队 - Shang Yongxing 本文介绍了当前DTS应用中,MySQL数据同步使用到的数据一致性校验工具,并对它的实现思路进行分享。 一、背景 在 MySQL 的使用过程中,经常会因为如集群拆分、数据传输、数据聚合等…

C++ 仿QT信号槽二

// 实现原理 // 每个signal映射到bitset位,全集 // 每个slot做为signal的bitset子集 // signal全集触发,标志位有效 // flip将触发事件队列前置 // slot检测智能指针全集触发的标志位,主动运行子集绑定的函数 // 下一帧对bitset全集进行触发清…

CUDA编程基础

文章目录 1、GPU介绍2、CUDA程序进行编译3、CUDA线程模型3.1、一维网格一维线程块3.2、二维网格二维线程块3.3、三维网格三维线程块3.3、不同组合形式 4、nvcc编译流程5、CUDA程序基本架构6、错误检测函数6.1、运行时API错误代码6.2、检查核函数 7、CUDA记时7.1、记时代码7.2、…

基于Python爬虫的城市二手房数据分析可视化

基于Python爬虫的城市二手房数据分析可视化 一、前言二、数据采集(爬虫,附完整代码)三、数据可视化(附完整代码)3.1 房源面积-总价散点图3.2 各行政区均价3.3 均价最高的10个小区3.4 均价最高的10个地段3.5 户型分布3.6 词云图四、如何更换城市一、前言 二手房具有价格普…

博途通讯笔记1:1200与1200之间S7通讯

目录 一、添加子网连接二、创建PUT GET三、各个参数的意义 一、添加子网连接 二、创建PUT GET 三、各个参数的意义

换根dp,CF 633F - The Chocolate Spree

一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 633F - The Chocolate Spree 二、解题报告 1、思路分析 2600的题,但是不算很困难。 先考虑暴力做法,如何得到两条不相交的路径? 枚举删除的边,得到两棵子树…

鼠标自动点击器怎么用?鼠标连点器入门教程!

鼠标自动点击器是适用于Windows电脑的自动执行鼠标点击操作的工具,主要用于模拟鼠标点击操作,实现鼠标高速点击的操作。通过模拟鼠标点击,可以在用户设定的位置、频率和次数下自动执行点击动作。 鼠标自动点击器主要的应用场景: …

数据操作10-15题(30 天 Pandas 挑战)

数据操作 1. 相关知识点1.12 分组与连表1.13 排名 2. 题目2.10 第N高的薪水2.11 第二高的薪水2.12 部门工资最高的员工2.13 分数排名2.14 删除重复的电子邮箱2.15 每个产品在不同商店的价格 1. 相关知识点 1.12 分组与连表 分组max_salaryemployee.groupby(departmentId)[sal…

超简易SpringBoot工程构建与部署 ( 图解 - 零基础专属 )

目录 简单了解MVC架构 模型(Model) 视图(View) 控制器(Controller) 基本环境准备 MYSQL建库建表 创库创表 智能生成数据 创建SpringBoot项目 配置pox.xml 代码提供 补充(IDEA的Maven要配置正确…

用kimi和claude自动生成时间轴图表

做时间轴图表并不难,但是很麻烦,先要大量收集相关事件,然后在一些图表软件中反复调整操作。现在借助AI工具,可以自动生成了。 首先,在kimi中输入提示词来获取某个企业的大事记: 联网检索,元语…