MySQL 总结 数据库结构优化

影响MYSQL 性能的因素有: 服务器硬件 , 操作 系统,  MySQL 服务器配置。

影响最大的是 数据库结构, 良好的数据库物理设计与逻辑设计 是数据库高性能的基础。

数据库结构 优化的目的:

1.减少数据冗余。

2.尽量避免数据维护中出现更新, 插入和删除异常。

        插入异常:表中某个实体随另一个实体而存在

        更新异常:更新表某个实体的单独属性,需要对多行进行更新

        删除异常:删除表中某一实体,会导致其他实体的消失。

对于该表,首先用户名与生日是数据冗余的,插入新学科 语文时, 该表主键是学号, 学科依赖学号存在, 直接插入语文学科会出错,这是插入异常, 更新 数学的学分时 ,如果表中存在大量数据,就会修改大量对应数学学科的数据,这是更新异常。

在删除数据时, 删除了数学学科信息, 对应的学生信息 也会消失, 这是删除异常。

3.节约数据存储空间

4.提交查询效率

数据库表结构设计步骤

1.了解产品设计的存储需求, 数据的存储需求,数据处理需求, 数据安全性与 完整性。

这一步很麻烦,提需求的人不懂技术, 懂技术的人又不太熟悉业务,沟通起来比较麻烦。

2.逻辑设计:设计数据的逻辑存储结构,  数据实体之间的逻辑关系,解决数据冗余和数据维护异常。(依照范式)

3.物理设计:根据所使用的数据库进行表结构设计。(关系型数据库, 非关系型数据库)

      数据库存储引擎 (MySQL 为Innodb)和 数据字段的类型。

数据库三范式

案例

电子商务网站: 功能 : 用户登录,用户管理,  商品展示,商品管理,  供应商管理, 在线销售。

完全的遵循 范式化,可能会降低SQL 查询效率。一是查询join 越多的表,性能越差。 二是 假如有订单表与用户表,如果遵循范式,每次获取用户订单都需要join, 那么要是用户手机号变了,就会导致购物时的手机号 与 先查询出的手机号不一致的问题。

这时就需要反范式化设计。

利用少量冗余数据来提高SQL 查询效率, 利用空间换时间。

订单表中加上 用户手机号, 用户名等信息。

使用反范式化设计,达到的效果可能 是无论怎么优化SQL语句都达不到的。

范式化和反范式化的优缺点

范式化优点:

范式化缺点:

Innodb 引擎来说,全表扫描 是顺序IO,  join是 随机IO, 全表扫描更快

范式化可能把不同列的分为不同的表中,所以这两个表中的两个列就不能创建复合索引

反范式化优点:

缺点:

数据库物理设计

根据所选数据库特点,对逻辑模型进行存储结构设计。

表中字段 选择合适类型

为字段选择太大长度,会增加数据库的内存,和磁盘IO。

原因:数据进行比较时(join连接条件,Where 条件), 字符类型处理与处理规则相关,而数字不需要根据字典规则进行处理,数据根据二进制大小来处理。同样数据,字符串处理往往比数字处理要慢。

另外,在数据库中数据处理是以页为单位的,每个页所存储的数据量是有限的。Innodb中是16K, 数据列越小意味着数据页中的能容纳数据越多。数据列小加载的数据页 就会比数据列大的数据 加载的数据页少, 减少磁盘IO,利于性能提升。

Decimal 类型 数据精确, 但是 占用字节数大。`

两个额外字节16位,决定varchar存储最大字符串长度是65535, 要定义大的varchar类型, 使用text类型。

更新字符串,因为长度会发生变化,可能会发生存储页的分裂,造成内存碎片。

如果字符串长度超过255,就使用varchar.

TimeStamp 是以int来存储的, 所以占4个字节。 也决定了时间范围。

第二个功能非常有用,经常用来标记数据最后被修改的时间。

  date类型可以用来存储 用户生日。

发布了12 篇原创文章 · 获赞 0 · 访问量 252

猜你喜欢

转载自blog.csdn.net/zhzsdiligence/article/details/102490791
今日推荐