《打造扛得住的MySQL数据库架构》第4章 MySQL数据库结构优化
4-1 数据库结构优化介绍
良好的数据库逻辑设计和物理设计是数据库获得高性能的基础。
1、减少不必要的数据冗余。
2、尽量避免数据维护中出现更新,插入和删除异常。
插入异常:如果表中的某个实体随着另一个实体而存在。
更新异常:如果更改表中的某个实体的单独属性时,需要对多行进行更新。
删除异常:如果删除表中的某一实体则会导致其他实体的消失。
3、节约数据存储空间
4、提高查询效率
show create table selectcourse\G

select * from selectcourse;


4-2 数据库结构设计
数据库结构设计的步骤
需求分析:全面了解产品设计的存储需求,数据处理需求,数据的安全性和完整性。
逻辑设计:设计数据的逻辑存储结构,数据实体之间的逻辑关系,解决数据冗余和数据维护异常。
物理设计:根据所使用的数据库特点进行表结构设计
SQL:Oralce、Mysql、postgresSQL
NoSQL:mongo、Redis、Hadoop
存储引擎和列的数据类型
维护优化:根据实际情况对索引、存储结构等进行优化。
数据库设计三范式
第一范式,
数据库表中的所有字段都只具有单一属性
单一属性的列是由基本的数据类型所构成的
设计出来的表都是简单的二维表
第二范式,
要求一个表中只具有一个业务主键
第三范式,
指每一个非主属性既不部分依赖于也不传递依赖于业务主键,也就是在第二范式的基础上消除了非主属性对主键的传递依赖。
4-3 需求分析及逻辑设计

用户登录及用户管理功能
用户必须注册并登录系统才能进行网上交易
用户名来作为用户信息的业务主键
同一时间一个用户只能在一个地方登录
用户信息:{用户名,密码,手机号,姓名,注册日期,在线状态,出生日期}
商品展示及商品管理功能
商品信息:{商品名称,分类名称,出版社名称,图书价格,图书描述,作者}

供应商管理功能
供应商信息:{出版社名称,地址,电话,联系人,银行账号}
在线销售功能
完全符合范式化的设计有时并不能得到良好的SQL查询性能。
适当的采取数据库反范式化,允许存在少量的数据冗余,使用空间来换取时间。
4-4 需求分析及逻辑设计-反范式化设计

4-5 范式化设计和反范式化设计优缺点
完全范式化设计的缺点:
对于查询需要对多个表进行关联。
更难进行索引优化。
反范式化设计的缺点:
对数据的修改需要更多的成本。
4-6 物理设计介绍
物理设计涉及的内容
定义数据库、表及字段的命名规范。
可读性原则
表意性原则
选择合适的存储引擎。

为表中的字段选择合适的数据类型。
当一个列可以选择多种数据类型时,应该优先考虑数字类型,其次是日期或二进制类型,最后是字符类型。


VARCHAR的适用场景:字符串列的最大长度比平均长度大很多。字符串列很少被更新。
CHAR类型是定长的,最大宽度为255 适合存储长度近似的值。比如MD5加密和表示性别的数字值。


timestamp类型显示依赖于所指定的时区。在行的数据修改时可以自动修改timestamp列的值。

alter table t modify d1 datetime(6),modify d2 timestamp(6);

date类型的优点:只需要3个字节、可以利用上日期时间函数。
time类型的格式:格式为HH:MM:SS

建立数据库结构。
4-9 物理设计-总结

如何为Innodb选择主键
主键应该尽可能的小
主键应该是顺序增长的
Innodb的主键和业务主键可以不同
《打造扛得住的MySQL数据库架构》第4章 MySQL数据库结构优化的更多相关文章
- Mysql基准测试详细解说(根据慕课网:《打造扛得住Mysql数据库架构》视频课程实时笔录)
什么是基准测试 基准测试是一种测量和评估软件性能指标的活动用于建立某个时刻的性能基准,以便当系统发生软硬件变化时重新进行基准测试以及评估变化对性能的影响. 我们可以这样认为:基准测试是针对系统设置的一 ...
- 《打造扛得住的MySQL数据库架构》第7章 SQL查询优化
SQL查询优化 7-1 获取有性能问题SQL的三种方法 如何设计最优的数据库表结构 如何建立最好的索引 如何拓展数据库的查询 查询优化,索引优化,库表结构优化 如何获取有性能问题的SQL 1.通过测试 ...
- 转 SQL 的数据库 架构规范 之 58到家数据库30条军规解读
军规适用场景:并发量大.数据量大的互联网业务 军规:介绍内容 解读:讲解原因,解读比军规更重要 一.基础规范 (1)必须使用InnoDB存储引擎 解读:支持事务.行级锁.并发性能更好.CPU及内存缓存 ...
- 高性能MySQL笔记:第1章 MySQL架构
MySQL 最重要.最与众不同的特性是他的存储引擎架构,这种架构的设计将查询处理(Query Precessing)及其系统任务(Server Task)和数据的存储/提取相分离. 1.1 MyS ...
- 第四模块:网络编程进阶&数据库开发 第2章·MySQL数据库开发
01-MySQL开篇 02-MySQL简单介绍 03-不同平台下安装MySQL 04-Windows平台MySQL密码设置与破解 05-Linux平台MySQL密码设置与破解 06-Mac平台MySQ ...
- MySQL基础之第5章 操作数据库
假设已经登录 mysql-h localhost -uroot -proot 5.1.显示.创建.删除数据库 show databases; 显示所有的数据库 create database ...
- MySQL篇,第四章:数据库知识4
MySQL 数据库 4 数据备份(在Linux终端操作) 1.命令格式 mysqldump -u用户名 -p 源库名 > 路径/XXX.sql 2.源库名的表示方式 --all-database ...
- MySQL篇,第三章:数据库知识3
MySQL 数据库 3 索引 1.普通索引(MUL) 2.唯一索引(UNI) 3.主键索引(PRI) 1.使用规则 1.一个表中只能有一个主键(primary)字段 2.对应字段的值不允许重复 ...
- MySQL基础之第13章 MySQL函数
13.1.数学函数 随机数可能会用到,其他基本无视. 13.2.字符串函数 重点CONCAT(S1,S2….) 13.3.日期和时间函数 一.MySQL 获得当前日期时间 函数 1.1 获得当前日期+ ...
随机推荐
- 人脸识别 API Key和Secret Key作用
App key简称API接口验证序号,是用于验证API接入合法性的.接入哪个网站的API接口,就需要这个网站允许才能够接入,如果简单比喻的话:可以理解成是登陆网站的用户名 App Secret简称AP ...
- centos6或7查看端口占用及解除占用
一.查看端口占用 netstat -lnp|grep 要查看的端口号 例如:查看占用端口7000的进程 netstat -lnp|grep 7000 二.清除占用 (1)一次性的清除占用80端口的程序 ...
- 安装phpmyadmin数据可视化
1.下载压缩包,并且解压 cd /usr/local/src wget https://files.phpmyadmin.net/phpMyAdmin/4.9.4/phpMyAdmin-4.9.4-a ...
- python itertools 用法
1.介绍itertools 是python的迭代器模块,itertools提供的工具相当高效且节省内存.使用这些工具,你将能够创建自己定制的迭代器用于高效率的循环.- 无限迭代器 itertools包 ...
- 《Python爬虫技术:深入理解原理、技术与开发》已经出版,送Python基础视频课程
好消息,<Python爬虫技术:深入理解原理.技术与开发>已经出版!!! JetBrains官方推荐图书!JetBrains官大中华区市场部经理赵磊作序!送Python基础视频课程!J ...
- [HNOI2008] 玩具装箱 D2 T3 斜率优化DP
Description P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊的一维容器中.P教授有编号为1... ...
- Delphi 10.4 最新消息
官方发布了关于10.4的消息,译文如下: 做为我们的Delphi,C ++ Builder和RAD Studio的订阅客户,除了获得更新,升级和技术支持等主要好处外,我们还邀请订阅客户参加Beta计划 ...
- Spark RDD 宽窄依赖
RDD 宽窄依赖 RDD之间有一系列的依赖关系, 可分为窄依赖和宽依赖 窄依赖 从 RDD 的 parition 角度来看 父 RRD 的 parition 和 子 RDD 的 parition 之间 ...
- P 1023 组个最小数
转跳点:
- 5 ~ express ~ 连接数据库
1, 在schema 目录创建 users.js 文件,通过 mongoose 模块来操作数据库 2, 在定义 users 表结构之前,需要让应用支持或连接数据库 . 所以要在应用的入口文件 app ...