热门标签 | 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?


推荐阅读
  • MySQL Decimal 类型的最大值解析及其在数据处理中的应用艺术
    在关系型数据库中,表的设计与SQL语句的编写对性能的影响至关重要,甚至可占到90%以上。本文将重点探讨MySQL中Decimal类型的最大值及其在数据处理中的应用技巧,通过实例分析和优化建议,帮助读者深入理解并掌握这一重要知识点。 ... [详细]
  • 【MySQL】frm文件解析
    官网说明:http:dev.mysql.comdocinternalsenfrm-file-format.htmlfrm是MySQL表结构定义文件,通常frm文件是不会损坏的,但是如果 ... [详细]
  • 本文详细介绍如何在SSM(Spring + Spring MVC + MyBatis)框架中实现分页功能。包括分页的基本概念、数据准备、前端分页栏的设计与实现、后端分页逻辑的编写以及最终的测试步骤。 ... [详细]
  • binlog2sql,你该知道的数据恢复工具
    binlog2sql,你该知道的数据恢复工具 ... [详细]
  • 本文探讨了如何在PHP与MySQL环境中实现高效的分页查询,包括基本的分页实现、性能优化技巧以及高级的分页策略。 ... [详细]
  • Maven + Spring + MyBatis + MySQL 环境搭建与实例解析
    本文详细介绍如何使用MySQL数据库进行环境搭建,包括创建数据库表并插入示例数据。随后,逐步指导如何配置Maven项目,整合Spring框架与MyBatis,实现高效的数据访问。 ... [详细]
  • 基于SSM框架的在线考试系统:随机组卷功能详解
    本文深入探讨了基于SSM(Spring, Spring MVC, MyBatis)框架构建的在线考试系统中,随机组卷功能的设计与实现方法。 ... [详细]
  • MySQL InnoDB 存储引擎索引机制详解
    本文深入探讨了MySQL InnoDB存储引擎中的索引技术,包括索引的基本概念、数据结构与算法、B+树的特性及其在数据库中的应用,以及索引优化策略。 ... [详细]
  • 在CentOS 7环境中安装配置Redis及使用Redis Desktop Manager连接时的注意事项与技巧
    在 CentOS 7 环境中安装和配置 Redis 时,需要注意一些关键步骤和最佳实践。本文详细介绍了从安装 Redis 到配置其基本参数的全过程,并提供了使用 Redis Desktop Manager 连接 Redis 服务器的技巧和注意事项。此外,还探讨了如何优化性能和确保数据安全,帮助用户在生产环境中高效地管理和使用 Redis。 ... [详细]
  • 本文提供了一个关于AC自动机(Aho-Corasick Algorithm)的详细解析与实现方法,特别针对P3796题目进行了深入探讨。文章不仅涵盖了AC自动机的基本概念,还重点讲解了如何通过构建失败指针(fail pointer)来提高字符串匹配效率。 ... [详细]
  • 在开发过程中,有时需要提供用户创建数据库的功能。本文介绍了如何利用 .NET 和 ADOX 在应用程序中实现创建 Access 数据库,并详细说明了创建数据库及表的具体步骤。 ... [详细]
  • 本文详细介绍了PostgreSQL与MySQL在SQL语法上的主要区别,包括如何使用COALESCE替代IFNULL、金额格式化的方法、别名处理以及日期处理等关键点。 ... [详细]
  • 本文详细介绍了在Linux操作系统上安装和部署MySQL数据库的过程,包括必要的环境准备、安装步骤、配置优化及安全设置等内容。 ... [详细]
  • 本文介绍了多种开源数据库及其核心数据结构和算法,包括MySQL的B+树、MVCC和WAL,MongoDB的tokuDB和cola,boltDB的追加仅树和mmap,levelDB的LSM树,以及内存缓存中的一致性哈希。 ... [详细]
  • 本文深入探讨了NoSQL数据库的四大主要类型:键值对存储、文档存储、列式存储和图数据库。NoSQL(Not Only SQL)是指一系列非关系型数据库系统,它们不依赖于固定模式的数据存储方式,能够灵活处理大规模、高并发的数据需求。键值对存储适用于简单的数据结构;文档存储支持复杂的数据对象;列式存储优化了大数据量的读写性能;而图数据库则擅长处理复杂的关系网络。每种类型的NoSQL数据库都有其独特的优势和应用场景,本文将详细分析它们的特点及应用实例。 ... [详细]
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社区 版权所有