数据库结构优化

2019-11-07  本文已影响0人  叫我胖虎大人

[TOC]

前言:良好的数据库结构逻辑设计和物理设计师数据库获得高性能的基础

影响数据库性能的因素

数据库结构优化的目的


查看表创建的SQL

show create table [tablename]\G

数据库设计的步骤

关系型数据库 Oracle,SQL Server,MySQL,postpresSQL
非关系型数据库 mongo,Redis,Hadoop
存储引擎 InnoDB,MyISAM 等

数据库设计范式

复合主键:有多个属性组成的主键

(1)简单归纳:
  第一范式(1NF):字段不可分;
  第二范式(2NF):有主键,非主键字段依赖主键;
  第三范式(3NF):非主键字段不能相互依赖。
(2)解释:
  1NF:原子性。 字段不可再分,否则就不是关系数据库;;
  2NF:唯一性 。一个表只说明一个事物;
  3NF:每列都与主键有直接关系,不存在传递依赖。(同一事物之间的属性的传递性依赖) join解决这个问题


数据库的反范式化设计

前言:完全符合范式化的设计有时候并不能得到良好的SQL查询性能.

反范式化设计是针对于范式化而言的,所谓的反范式化设计就是为了性能和读取效率而适当的对数据库设计方式的要求进行违反,而存在少量的数据冗余,换句话来说就是反范式化设计就是使用空间来换时间.

范式化的优缺点

优点

缺点

反范式化设计的优缺点

优点

缺点

总结:在进行数据库设计的时候要合理的使用反范式化设计和范式化设计 ,完全的反范式化和范式化都不一定是最好的方案.


数据库物理设计

物理设计涉及的内容

选择合适的存储引擎

存储引擎的特性

为表中的字段选择合适的数据类型

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

正确的选择整数类型 int(2)还是会占用4个字节的空间

整型值范围

如何选择正确的实数类型

浮点型范围

进度丢失演示


DECIMAL(18,9) 需要9个字节来存储

长18位,小数点后面9位

正确选择VARCHAR和CHAR类型(单位定义是以字符为单位的)

1.字符串列的最长长度要比平均长度大很多
2.字符串列很少被更新
3.使用了多字节字符集存储字符串

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

时间日期存储

TIMESTAMP 4字节
DATETIME 8字节
DATE 3字节

DATETIME



DATETIME类型

6指的是保留6为微秒数

时间范围是1000-01-01 00:00:00 到 9999-12-31 23:59:59

TIMESTAMP
TIMESTAMP类型

在数据库中只有第一个timestamp是会自动更新的(默认,可以修改)

DATE


如何为InnoDB选择主键

上一篇 下一篇

猜你喜欢

热点阅读