mysql架构学习——数据库结构优化笔记
数据库结构优化
目的
- 减少数据冗余
- 尽量避免数据维护中出现更新,插入和删除异常
设计步骤
- 需求分析:全面了解产品设计的存储需求,数据处理需求,数据的安全性和完整性
- 逻辑设计:设计数据的逻辑存储结构,数据实体之间的逻辑关系,解决数据冗余和数据维护异常
- 物理设计:根据所使用的数据库特点进行表结构设计
逻辑设计
什么是反范式化设计
为了性能和读取效率的考虑而适当的对数据库设计范式的要求进行违反,而允许存在少量的数据冗余(用空间换时间)
范式化设计的优缺点
优点
- 可以减少数据冗余
- 范式化的更新操作比反范式化更快
- 范式化的表通常比反范式化更小
缺点
- 对于查询需要对多个表进行关联
- 更难进行索引优化
反范式化设计的优缺点
优点
- 可以减少表的关联
- 可以更好的进行索引优化
缺点
- 存在数据冗余及数据维护异常
- 对数据的修改需要更多的成本
物理设计
定义数据库、表及字段的命名规范
- 数据库、表及字段的命名要遵守可读性原则
- 数据库、表及字段的命名要遵守表意性原则
- 数据库、表及字段的命名要遵守长名原则
选择合适的存储引擎
为表中的字段选择合适的数据类型
当一个列数据类型没有特定需求限制时,优先考虑数字类型,其次是日期或二进制类型,最后是字符类型。对于相同级别的数据类型,优先选择占用空间小的数据类型(因为字符类型数据进行比较时需要先参照字典排序规则,所以更慢)
如何正确的选择整数类型
如何选择正确的实数类型
如何选择varchar和char
注意:varchar和char以字符为单位而非字节,所以varchar(255)可以存放255个中文字符,我之前一直搞错了。。。
单张表分配给varchar类型的分配的空间为65535字节
varchar的存储特点
用于存储变长字符串,只占用必要的存储空间
varchar的最大长度小于255则只占用一个额外字节用于记录字符串长度
varchar的最大长度大于255则需占用两个额外字节用于记录字符串长度
varchar长度的选择问题
- 使用最小的符合需求的长度
- varchar(5)和varchar(200)存储'MySQL'字符串性能不同
varchar的适用场景
- 字符串列的最大长度比平均长度大很多
- 字符串列很少被更新
- 使用了多字节字符集存储字符串
char的存储特点
- CHAR类型是定长的
- 字符串存储在CHAR类型的列中会删除末尾的空格
- CHAR类型的最大跨度为255个字符
CHAR类型使用场景
- 适合存储长度近似的值
- 适合存储短字符串
- 适合存储经常更新的字符串列
如何存储日期数据
DATETIME类型
以YYYY-MM-DD HH:MM:SS[.fraction]格式存储日期时间
datetime = YYYY-MM-DD HH:MM:SS
datetime(6) = YYYY-MM-DD HH:MM:SS.fraction
DATETIME与时区无关,占用8个字节的存储空间
时间范围1000-01-01 00:00:00到9999-12-31 23:59:59
TIMESTAMP类型
存储了有1970年1月1日到当前时间的秒数
以YYYY-MM-DD HH:MM:SS.[.fraction]的格式显示,占用4个字节
时间范围1970-01-01到2038-01-19
timestamp类型显示依赖于所指定的时区
在行的数据修改是可以自动修改timestamp列的值
date类型和time类型
date类型的优点
- 占用的字节数比使用字符串、datetime、int存储要少,使用date类型只需要 3个字节
- 使用Date类型还可以利用日期时间函数进行日期之间的计算
用于保存1000-01-01到9999-12-31之间的日期
time类型用于存储时间数据,格式为HH:MM:SS
注意事项
- 不要使用字符串类型来存储日期时间数据(我经常这样。。。)
- 日期时间类型通常比字符串占用的存储空间小
- 日期时间类型在查找过滤时可以利用日期来进行对比
- 日期类型有丰富的处理函数,可以方便的对时期类型进行日期计算
- 使用int存储日期时间不如使用timestamp类型(工作室一直使用int型存储的,不知道为什么。。。)
mysql架构学习——数据库结构优化笔记相关推荐
- mysql性能结构优化原理_MySQL性能管理及架构设计(二):数据库结构优化、高可用架构设计、数据库索引优化...
一.数据库结构优化(非常重要) 1.1 数据库结构优化目的 1.减少数据冗余:(数据冗余是指在数据库中存在相同的数据,或者某些数据可以由其他数据计算得到),注意,尽量减少不代表完全避免数据冗余: 2. ...
- ef mysql 优化_MySQL性能管理及架构设计(二):数据库结构优化、高可用架构设计、数据库索引优化...
一.数据库结构优化(非常重要) 1.1 数据库结构优化目的 1.减少数据冗余:(数据冗余是指在数据库中存在相同的数据,或者某些数据可以由其他数据计算得到),注意,尽量减少不代表完全避免数据冗余: 2. ...
- MySQL性能管理及架构设计(二):数据库结构优化、高可用架构设计、数据库索引优化...
一.数据库结构优化(非常重要) 1.1 数据库结构优化目的 1.减少数据冗余:(数据冗余是指在数据库中存在相同的数据,或者某些数据可以由其他数据计算得到),注意,尽量减少不代表完全避免数据冗余: 2. ...
- Mysql(五)Mysql架构、数据库优化、主从复制
文章目录 一.Mysql架构 1.1 查询语句的执行过程 1.1.1 连接器 1.1.2 查询缓存 1.1.3 分析器 1.1.4 优化器 1.1.5 执行器 1.1.6 存储引擎 1.1.7 执行引 ...
- mysql结构优化_MySQL优化----数据库结构优化
数据库结构优化 选择合适的数据类型 数据类型的选择,重点在于合适二字,如何确定选择的数据类型是否合适? 1.使用可以存下你的数据的最小的数据类型. 2.使用简单的数据类型.Int要比carchar类型 ...
- Mysql数据库结构优化
影响Mysql数据库的因素 数据库结构优化的目的 数据库结构设计的步骤 数据库设计范式 数据库设计的第一范式 数据库设计的第二范式 数据库设计的第三范式 反范式化设计 数据库物理设计 定义数据库表及字 ...
- 第4章 MySQL数据库结构优化
尽量减少数据冗余–但是也是要有冗余 数据库结构优化的目的: 提高查询效率 数据库结构设计的步骤 需求分析 逻辑设计 物理设计 维护优化 数据库设计方式:数据库三范式 第一范式 第二范式 第三范式 需求 ...
- MySQL 5.7数据库参数优化
MySQL 5.7数据库参数优化 连接相关参数 max_connections:允许客户端并发连接的最大数量,默认值是151,一般将该参数设置为500-2000 max_connect_errors: ...
- mysql备份导出数据库结构_MySql数据库导出完整版(导出数据库,导出表,导出数据库结构)详解...
用MySqlCE导出数据库脚本时,如数据库中包含中文内容,则导出异常. 现在可以通过mysqldump.exe直接导出数据库脚本步骤如下: Step One 运行 Cmd 打开控制台程序 Step T ...
最新文章
- 人工智能正在推动芯片的复兴
- Python遍历字典删除元素
- 使用common-fileUpload制作文件上传【转】
- 光源时间_背光源缩短寿命的原因
- 思科CCNA考试实验常用的命令
- poweramp最完美设置_2020年感恩节,你最想感谢的人是谁?
- 在sql server2000的查询分析器里查询oracle的数据
- CodeForces 839D - Winter is here | Codeforces Round #428 (Div. 2)
- 分布式系统CAP定理
- ASP.NET Core amp; Docker 实战经验分享
- node模块函数图解
- Depth-first Search深度优先搜索专题3
- 23期PHP基础班第四天
- Python连接mysql基本操作
- 搜索引擎排名点击跳转问题解决办法
- Bootstrap 默认栅格系统
- IntelliJ IDEA 注释模版 输入/**后 不显示配置好的模板
- 在MyEclipse(2015)中上传项目到github的步骤(很详细)
- input html5 新特性,html5 input 新特性
- mysql引擎 实际应用_MySQL数据库中的三个引擎