我的编程空间,编程开发者的网络收藏夹
学习永远不晚

【MySQL】高性能高可用表设计实战-表设计篇(MySQL专栏启动)

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

【MySQL】高性能高可用表设计实战-表设计篇(MySQL专栏启动)

📫作者简介:小明java问道之路,专注于研究 Java/ Liunx内核/ C++及汇编/计算机底层原理/源码,就职于大型金融公司后端高级工程师,擅长交易领域的高安全/可用/并发/性能的架构设计与演进、系统优化与稳定性建设。

 

📫 热衷分享,喜欢原创~ 关注我会给你带来一些不一样的认知和成长。

 

🏆 InfoQ签约作者、CSDN专家博主/后端领域优质创作者/内容合伙人、阿里云专家/签约博主、51CTO专家 🏆

 

🔥如果此文还不错的话,还请👍关注、点赞、收藏三连支持👍一下博主~ 

本文目录

本文目录

本文导读

一、库、表、字段、索引命名设计规范

二、反范式表结构设计实战

1、什么是数据库设计范式?

1.1 数据库设计的第一范式

1.2 数据库设计的第二范式

1.3 数据库设计的第三范式

2、忘记范式准则,反范式设计实战

三、企业表压缩实战

1、什么是压缩表

2、TPC压缩实战

总结


本文导读

本篇文章结合前面上一篇文章 MySQL建表与常见类型设计陷阱,结合上文所学的属性类型,本文详细介绍表结构的字段类型选择和表的物理存储设计,主要有库、表、字段、索引的命名规范,反范式的设计原则、表压缩。

一、库、表、字段、索引命名设计规范

命名规范如下,命名时的字符取值范围为:a~z、A~Z和下划线。 ,所有表名小写并且不允许驼峰式命名,不允许使用其他特殊字符作为名称,减少潜在风险。

数据库库名和表名的命名都应该遵循见名知意的原则。

表名的命名规则仅使用 a~z、下划线,分表名称为表名_编号,业务表必须包含业务含义

这样包含了更多的业务信息,比如:订单系统库ORDER、商品系统库GOODS、活动营销系统库PROMO等等。订单表order_info、分摊明细表fork_business_detail、支付流水表order_pay_log等等。

字段名精确,遵循见名知意的原则,格式:名称_后缀。例如用户名的字段为 UserName 而不是 Name ,布尔型的字段,以 is 开头,例如是否通过检查 ischecked
常见后缀如下:流水号或者无意义主键,后缀为 id,比如 order_id,时间后缀为 time,insert_time。

索引命名格式,主要为了区分哪些对象是索引,前缀_表名或缩写)_字段名,主键必须使用前缀“pk_”,UNIQUE 约束必须使用前缀“uk_”,普通索引必须使用前缀“idx_”。

创建表时显示指定字符集、存储引擎、注释信息等。不同系统之间,应该由DBA统一规范;

不同表之间的相同字段或者关联字段,字段类型/命名要保持一致;库表字符集和前端程序、中间件必须保持一致的 UTF8mb4。

数据库规范库表字段的命名,能够提高数据库的易读性。

二、反范式表结构设计实战

1、什么是数据库设计范式?

1.1 数据库设计的第一范式

数据库表中的所有字段都只具有单一属性,单一属性的列是由基本数据类型所构成的,设计出来的表都是简单的二维表:
例如name-age列具有两个属性,一个name,一个age不符合第一范式,应该把它拆分成两列

1.2 数据库设计的第二范式

要求表中只具有一个业务主键,也就是说符合第二范式的表不能存在非主键列只对部分主键的依赖关系。

一个订单有多个产品,所以订单的主键为【订单ID】和【产品ID】组成的联合主键,这样2个组件不符合第二范式,而且产品ID和订单ID没有强关联,故,把订单表进行拆分为订单表与订单与商品的中间表。

1.3 数据库设计的第三范式

指每一个非非主属性既不部分依赖于也不传递依赖于业务主键,也就是在第二范式的基础上相处了非主键对主键的传递依赖

其中。客户编号 和订单编号管理 关联,客户姓名 和订单编号管理 关联,客户编号 和 客户姓名 关联,如果客户编号发生改变,用户姓名也会改变,这样不符合第三大范式,应该把客户姓名这一列删除。

2、忘记范式准则,反范式设计实战

真实的业务场景是工程实现,表结构设计做好以下三点就已经足够:

每张表一定要有一个主键、有创建时间、创建人、更新时间更新人;

适当冗余数据、对复杂对象使用JSON大字段存储,一份数据在一张表只保留一份,可以适当冗余需要关联查询的不变的数据;

对分库分表(分布式数据库)不是用自增ID做主键,业务表应该使用 UUID 或业务(具有业务唯一性)自定义主键;

三、企业表压缩实战

当业务发展到一定规模,表设计的再优秀也会发生性能问题,一旦发生就是严重性的。对于没有分库分表的表,在物理存储层面主要是考虑是否要使用压缩(页)表功能,默认情况下,所有表都是非压缩的。

1、什么是压缩表

数据库表空间中的页存储在磁盘上,MySQL数据库必须首先将磁盘中的页读取到内存缓冲池,然后读取和管理页中的记录。因此,页中存储的记录越多,数据库的性能就越高。

在MySQL中,页的默认大小为16K,页构成每个表的表空间。页中存储的记录越多,内存中可以存储的记录就越多,访问效率就越高。

如果要增加页中的记录数,可以启用压缩功能。此外,启用压缩后,存储空间更小,同一存储单元可以存储更多数据。

启用压缩技术,可以根据每个数据、数据库表和页空间压缩数据库。

然而在实际项目中,我们通常使用页压缩技术。为什么?

压缩每条记录,每次读取或写入记录时,都会对其进行压缩和解压缩。如果过分依赖CPU的计算能力,性能将显著下降,而且单个记录的大小不是特别大,一般小于1K,所以压缩效率不是特别好;压缩表空间要求表空间文件不会静态增长。

通过页压缩技术,MySQL可以将16K页压缩到8K,甚至4K,这样当从磁盘写入或读取时,I/O请求大小可以减半,甚至更小,以提高数据库的整体性能。

2、TPC压缩实战

我们一般使用,TPC压缩,TPC(Transparent Page Compression 透明页压缩)是5.7版中引入的一种新的页压缩功能。压缩16K页后,将为8K。

然后数据库将为16K页的剩余8K填充0x00。当16K页写入磁盘时,基于TPC压缩的测试结果将在未压缩的基础上额外提高40%的性能。

可以使用以下命令创建TPC压缩表,如果是创建表的时候没有压缩,通过 ALTER TABLE “表名” 启用 TPC 压缩后,还需要执行命令 OPTIMIZE TABLE 才能立即完成空间的压缩。

CREATE TABLE order_info (  // )COMPRESSION=ZLIB | LZ4 | NONE;

总结

本篇文章结合前面上一篇文章 MySQL建表与常见类型设计陷阱,结合上文所学的属性类型,本文详细介绍表结构的字段类型选择和表的物理存储设计,主要有库、表、字段、索引的命名规范,反范式的设计原则、表压缩。

后续博主会对建表的索引设计进行详细介绍。

来源地址:https://blog.csdn.net/FMC_WBL/article/details/127706498

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

【MySQL】高性能高可用表设计实战-表设计篇(MySQL专栏启动)

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

如何设计一个高性能的MySQL表结构来实现推荐电影功能?

如何设计一个高性能的MySQL表结构来实现推荐电影功能?近年来,推荐系统在电商、社交网络、音乐和影视等领域得到了广泛应用。其中,推荐电影功能在视频流媒体平台上尤为重要。为了实现高性能的推荐电影功能,设计一个合理的MySQL表结构是至关重要的
如何设计一个高性能的MySQL表结构来实现推荐电影功能?
2023-10-31

如何设计一个高性能的MySQL表结构来实现地理位置功能?

如何设计一个高性能的MySQL表结构来实现地理位置功能?地理位置功能在许多应用程序中都是必不可少的,例如地图应用、附近的人、附近的商家等。在MySQL数据库中,我们可以通过合理设计表结构和使用索引来实现地理位置功能,并保证高性能的查询和更新
如何设计一个高性能的MySQL表结构来实现地理位置功能?
2023-10-31

如何设计一个高性能的MySQL表结构来实现推荐音乐功能?

如何设计一个高性能的MySQL表结构来实现推荐音乐功能?摘要:随着音乐流媒体服务的普及,推荐音乐功能是吸引用户的重要方式之一。在实现推荐音乐功能时,合理设计MySQL表结构对于提高性能至关重要。本文将详细介绍如何设计一个高性能的MySQL表
如何设计一个高性能的MySQL表结构来实现推荐音乐功能?
2023-10-31

如何设计一个高性能的MySQL表结构来实现推荐影视功能?

如何设计一个高性能的MySQL表结构来实现推荐影视功能?在当前互联网时代,推荐系统已经成为了各大影视平台的一项重要功能。通过推荐系统,平台可以根据用户的兴趣和行为习惯,推荐他们可能感兴趣的影视作品,提高用户的使用体验和平台的收益。而推荐系统
如何设计一个高性能的MySQL表结构来实现推荐影视功能?
2023-10-31

如何设计一个高性能的MySQL表结构来实现推荐系统功能?

如何设计一个高性能的MySQL表结构来实现推荐系统功能?推荐系统是很多互联网平台的重要组成部分,它通过分析用户的行为和偏好,提供个性化的推荐内容。在推荐系统的实现中,数据库扮演着关键角色,因此设计一个高性能的MySQL表结构非常重要。本文将
如何设计一个高性能的MySQL表结构来实现推荐系统功能?
2023-10-31

如何设计一个高性能的MySQL表结构来实现推荐美食功能?

如何设计一个高性能的MySQL表结构来实现推荐美食功能?随着人们对美食的需求越来越高,推荐系统在美食领域的应用也逐渐增多。设计一个高性能的MySQL表结构来实现推荐美食功能,将会对提升用户体验和平台发展起到重要作用。本文将介绍如何设计这样一
如何设计一个高性能的MySQL表结构来实现推荐美食功能?
2023-10-31

如何设计一个高性能的MySQL表结构来实现日志管理功能?

如何设计一个高性能的MySQL表结构来实现日志管理功能?随着互联网的发展,日志管理对于系统运维和故障分析变得越来越重要。MySQL作为一种常用的关系型数据库,在日志管理中也发挥着重要作用。设计一个高性能的MySQL表结构来实现日志管理功能,
如何设计一个高性能的MySQL表结构来实现日志管理功能?
2023-10-31

如何设计一个高性能的MySQL表结构来实现推荐书籍功能?

如何设计一个高性能的MySQL表结构来实现推荐书籍功能?推荐系统在现代电商平台和社交媒体应用中起着至关重要的作用,能够提高用户体验、增加用户黏性和促进销售。而在推荐系统中,一个关键的部分就是基于用户的兴趣和行为数据来推荐相关的书籍。在设计高
如何设计一个高性能的MySQL表结构来实现推荐书籍功能?
2023-10-31

如何设计一个高性能的MySQL表结构来实现推荐电视剧功能?

如何设计一个高性能的MySQL表结构来实现推荐电视剧功能?推荐系统在今天的电视剧平台中变得越来越重要,它不仅可以帮助用户发现新的电视剧,还可以提升用户体验。而一个高性能的MySQL表结构设计是实现这一目标的关键。本文将介绍如何设计一个高性能
如何设计一个高性能的MySQL表结构来实现推荐电视剧功能?
2023-10-31

如何在MySQL中设计一个高可用的会计系统表结构以确保数据的可靠性和可用性?

如何在MySQL中设计一个高可用的会计系统表结构以确保数据的可靠性和可用性?在设计一个高可用的会计系统表结构时,我们需要考虑数据的可靠性和可用性。下面将介绍一些在MySQL中设计高可用的会计系统表结构的方法,并提供相应的代码示例。使用事务事
如何在MySQL中设计一个高可用的会计系统表结构以确保数据的可靠性和可用性?
2023-10-31

如何设计一个高效的MySQL表结构来实现用户管理功能?

如何设计一个高效的MySQL表结构来实现用户管理功能?为了实现用户管理功能,我们需要在数据库中设计一张用户表来存储用户相关信息,如用户名、密码、邮箱等。下面将逐步介绍如何设计高效的MySQL表结构来实现用户管理功能。一、创建用户表首先,我们
如何设计一个高效的MySQL表结构来实现用户管理功能?
2023-10-31

如何设计一个高效的MySQL表结构来实现视频评论功能?

如何设计一个高效的MySQL表结构来实现视频评论功能?在一个视频网站上,用户可以观看视频并发表评论。有时候,我们需要存储大量的评论数据并能够高效地查询和展示这些评论。设计一个高效的MySQL表结构是确保功能正常运行的重要一步。本文将介绍如何
如何设计一个高效的MySQL表结构来实现视频评论功能?
2023-10-31

如何设计一个高效的MySQL表结构来实现音频播放功能?

如何设计一个高效的MySQL表结构来实现音频播放功能?在开发音频播放功能时,一个高效的MySQL表结构设计是非常重要的。一个良好设计的表结构能够保证数据存储的效率和数据检索的速度。本文将介绍如何设计一个高效的MySQL表结构来实现音频播放功
如何设计一个高效的MySQL表结构来实现音频播放功能?
2023-10-31

如何设计一个高效的MySQL表结构来实现直播弹幕功能?

如何设计一个高效的MySQL表结构来实现直播弹幕功能?前言:随着直播平台的发展,弹幕功能已经成为直播的重要组成部分之一。弹幕即在直播过程中,观众可以实时发送消息并显示在直播画面上。为了实现高效的直播弹幕功能,我们需要设计一个合理的MySQL
如何设计一个高效的MySQL表结构来实现直播弹幕功能?
2023-10-31

如何设计一个高效的MySQL表结构来实现广告展示功能?

如何设计一个高效的MySQL表结构来实现广告展示功能?对于广告展示功能,一个高效的MySQL表结构设计可以提高查询和插入操作的性能,提升系统的稳定性和响应速度。以下将详细介绍如何设计一个高效的MySQL表结构来实现广告展示功能,并提供相应的
如何设计一个高效的MySQL表结构来实现广告展示功能?
2023-10-31

如何设计一个高效的MySQL表结构来实现视频直播功能?

如何设计一个高效的MySQL表结构来实现视频直播功能?在今天的互联网时代,视频直播成为了一种非常流行和实用的方式,让用户可以随时随地观看到他们感兴趣的事件或内容。而要实现视频直播功能,数据库设计是非常重要的一环。本文将介绍如何设计一个高效的
如何设计一个高效的MySQL表结构来实现视频直播功能?
2023-10-31

如何设计一个高效的MySQL表结构来实现音乐播放功能?

如何设计一个高效的MySQL表结构来实现音乐播放功能?在设计一个能够高效地实现音乐播放功能的数据库表结构时,我们需要考虑以下几个重要的因素:数据一致性、查询速度和扩展性。下面将详细介绍如何设计这个表结构,并给出一些具体的代码示例。首先,我们
如何设计一个高效的MySQL表结构来实现音乐播放功能?
2023-10-31

如何设计一个高效的MySQL表结构来实现视频播放功能?

如何设计一个高效的MySQL表结构来实现视频播放功能?随着网络带宽的提升和用户对高质量视频的需求增加,视频播放功能在各种网站和应用程序中越来越常见。为了实现高效的视频播放功能,设计一个合理的MySQL表结构是至关重要的。本文将介绍如何设计一
如何设计一个高效的MySQL表结构来实现视频播放功能?
2023-10-31

编程热搜

目录