热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

提升MySQL数据库架构性能的策略与方法

为了提升MySQL数据库架构的性能,本文探讨了多种策略与方法。首先,分析了影响数据库性能的关键因素,并详细阐述了数据库结构优化的重要性。接着,介绍了数据库设计的基本步骤,包括第一、第二和第三范式的应用,以及反范式化设计的场景。此外,还讨论了数据库物理设计的关键要素,如表定义、索引设计和存储引擎选择,以确保高效的查询响应和数据管理。

  • 影响Mysql数据库的因素
  • 数据库结构优化的目的
  • 数据库结构设计的步骤
  • 数据库设计范式
    • 数据库设计的第一范式
    • 数据库设计的第二范式
    • 数据库设计的第三范式
    • 反范式化设计
  • 数据库物理设计
    • 定义数据库表及字段的命名规范
    • 选择合适的存储引擎
    • 物理设计-数据类型的选择
影响Mysql数据库的因素
  1. 服务器硬件
  2. 操作系统
  3. mysql服务器配置
  4. 数据库结构(影响最大)

良好的数据库逻辑设计和物理设计是数据库获得高性能的基础

数据库结构优化的目的
  1. 减少数据的冗余
  2. 尽量避免数据维护中出现 更新、插入、删除异常
  3. 节约数据存储空间
数据库结构设计的步骤
  1. 需求分析:全面了解产品设计的存储需求
  2. 逻辑设计:设计数据的逻辑存储结构
  3. 物理设计:根据所使用的数据库特点进行表结构设计
  4. 维护优化:根据实际情况对索引、存储结构等进行优化
数据库设计范式

数据库设计的第一范式:

  • 数据库表中的所有字段都具有单一属性(即字段不能再分割了)
  • 单一属性的列是由基本数据类型所构成的
  • 设计出来的表都是简单的二维表

数据库设计的第二范式:

第二范式在第一范式的基础之上更进一层。第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。也就是说在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中。

数据库设计的第三范式:

首先要满足第二范式,其次非主属性之间不存在函数依赖。由于满足了第二范式,表示每个非主属性都函数依赖于主键。如果非主属性之间存在了函数依赖,就会存在传递依赖,这样就不满足第三范式。

总结:
第一范式就是原子性,字段不可再分割;
第二范式就是完全依赖,没有部分依赖;
第三范式就是没有传递依赖

反范式化设计

反范式化就是为了性能和读取效率的考虑而适当的对数据库设计范式的要求进行违反,而允许存在少量的数据冗余,也就是使用空间来换取(查询)时间

不能要求完全按照范式化的要求进行数据库设计,要考虑以后表的使用(查询等)
举个例子:比如订单表中应该保留当前购买商品的价格、商品的名称(商品的价格是会变动的,这很危险)

范式化设计的优缺点
优点:

  1. 可以尽量的减少数据冗余
  2. 范式化的更新操作比反范式化更快
  3. 范式化的表通常比反范式化更小

缺点:

  1. 对于查询需要关联多个表
  2. 更难进行索引优化

反范式化设计的优缺点
优点:

  1. 可以减少表的关联
  2. 可以更好的进行索引优化

缺点:

  1. 存在数据冗余和数据维护异常
  2. 对数据修改需要更多的成本
数据库物理设计
  • 定义数据库、表及字段的命名规范
  • 选择合适的存储引擎
  • 为表中的字段选择合适的存储引擎
  • 建立数据库表

定义数据库、表及字段的命名规范

  • 数据库、表、字段的命名要遵守可读性原则
  • 数据库、表、字段的命名要遵守表意性原则(采用英文,且意思准确)
  • 数据库、表、字段的命名要遵守长名原则(尽量不要使用缩写)

选择合适的存储引擎

《Mysql数据库结构优化》

物理设计-数据类型的选择

为表中字段选择合适的数据类型:
当一个列可以选择多种数据类型时,应该优先考虑数字类型,其次是日期类型或二进制类型,最后是字符类型。对于相同级别的数据类型,应该优先选择占用空间小的数据类型

如何选择正确的整数类型

《Mysql数据库结构优化》

如何选择正确的实数类型

《Mysql数据库结构优化》

如何选择varchar和char类型

varchar类型特点:

  • varchar和char是以字符为单位的,不是字节。一个字符可能占用多个字节
  • varchar用于存储变长字符串,只占用的必要的存储空间。

char类型特点:

  • char类型是定长的
  • 字符串存储在char类型的列中会删除末尾的空格
  • char类型的最大宽度为255

varchar使用场景:

  • 适用于存储很少被更新的字符串列

char使用场景:

  • 适合存储长度近似的值
  • 适合存储短字符串
  • 适合存储经常更新的字符串

如何存储日期类型

datatime类型

  • datatime类型与时区无关,占用8个字节的存储空间
  • 存储范围为1000-01-01 00:00:00 ~ 9999-12-31 23:59:59
  • 如果需要存储微秒时间,则需要指定宽度,比如datetime(6)

timestamp类型

  • timestamp类型占用4个字节,显示依赖于所指定的时区
  • 范围为1970-01-01 08:00:01到2038-01-19 11:14:07
  • TIMESTAMP支持的范围比DATATIME要小,容易出现超出的情况
  • TIMESTAMP类型在默认情况下,insert、update 数据时,TIMESTAMP列会自动以当前时间(CURRENT_TIMESTAMP)填充/更新。
  • TIMESTAMP比较受时区timezone的影响以及MYSQL版本和服务器的SQL MODE的影响

date类型和time类型

  • 占用字节比字符串、datetime、int存储类型要少,使用date类型只需要3个 字节
  • 使用date类型还可以利用日期和时间函数进行日期之间的计算
  • 仅有日期值,没有时间部分。以’YYYY-MM-DD’格式显示DATE值,支持的范围是’1000-01-01’到’9999-12-31’。
  • TIME数据类型表示一天中的时间。以”HH:MM:SS”格式显示TIME值。支持的范围是’00:00:00’到’23:59:59’。

使用日期时间存储类型注意事项

  • 不要使用字符串类型来存储日期、时间数据,日期时间类型通常比字符串占用更少的存储空间
  • 日期时间类型在进行查找过滤时,可利用日期来进行对比
  • 日期时间类型有丰富的处理函数,可以方便的对日期类型进行计算
  • 使用int存储日期时间,不如使用timestamp

参考链接

数据库设计三大范式
第五章 SqlServer之数据库三大范式

MySQL之char、varchar和text的设计
Mysql时间字段格式如何选择,TIMESTAMP,DATETIME,INT?


推荐阅读
  • 毕业设计:基于机器学习与深度学习的垃圾邮件(短信)分类算法实现
    本文详细介绍了如何使用机器学习和深度学习技术对垃圾邮件和短信进行分类。内容涵盖从数据集介绍、预处理、特征提取到模型训练与评估的完整流程,并提供了具体的代码示例和实验结果。 ... [详细]
  • 本文探讨了MariaDB在当前数据库市场中的地位和挑战,分析其可能面临的困境,并提出了对未来发展的几点看法。 ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • 本文探讨了 C++ 中普通数组和标准库类型 vector 的初始化方法。普通数组具有固定长度,而 vector 是一种可扩展的容器,允许动态调整大小。文章详细介绍了不同初始化方式及其应用场景,并提供了代码示例以加深理解。 ... [详细]
  • 本实验主要探讨了二叉排序树(BST)的基本操作,包括创建、查找和删除节点。通过具体实例和代码实现,详细介绍了如何使用递归和非递归方法进行关键字查找,并展示了删除特定节点后的树结构变化。 ... [详细]
  • SQLite 动态创建多个表的需求在网络上有不少讨论,但很少有详细的解决方案。本文将介绍如何在 Qt 环境中使用 QString 类轻松实现 SQLite 表的动态创建,并提供详细的步骤和示例代码。 ... [详细]
  • 本文详细探讨了VxWorks操作系统中双向链表和环形缓冲区的实现原理及使用方法,通过具体示例代码加深理解。 ... [详细]
  • 本教程涵盖OpenGL基础操作及直线光栅化技术,包括点的绘制、简单图形绘制、直线绘制以及DDA和中点画线算法。通过逐步实践,帮助读者掌握OpenGL的基本使用方法。 ... [详细]
  • 尽管使用TensorFlow和PyTorch等成熟框架可以显著降低实现递归神经网络(RNN)的门槛,但对于初学者来说,理解其底层原理至关重要。本文将引导您使用NumPy从头构建一个用于自然语言处理(NLP)的RNN模型。 ... [详细]
  • 5G至4G空闲态移动TAU流程解析
    本文详细解析了用户从5G网络移动到4G网络时,在空闲态下触发的跟踪区更新(TAU)流程。通过N26接口实现无缝迁移,确保用户体验不受影响。 ... [详细]
  • MySQL索引详解与优化
    本文深入探讨了MySQL中的索引机制,包括索引的基本概念、优势与劣势、分类及其实现原理,并详细介绍了索引的使用场景和优化技巧。通过具体示例,帮助读者更好地理解和应用索引以提升数据库性能。 ... [详细]
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
  • 探讨如何真正掌握Java EE,包括所需技能、工具和实践经验。资深软件教学总监李刚分享了对毕业生简历中常见问题的看法,并提供了详尽的标准。 ... [详细]
  • 本文探讨了2019年前端技术的发展趋势,包括工具化、配置化和泛前端化等方面,并提供了详细的学习路线和职业规划建议。 ... [详细]
  • 本文介绍了如何利用MongoDB的$exists操作符在Java应用程序中检查特定字段是否存在于文档中,包括示例代码和解释。 ... [详细]
author-avatar
静净精时
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有