美文网首页一个程序猿的奋斗史php开发
数据库性能优化:结构设计和优化

数据库性能优化:结构设计和优化

作者: 快乐的提千万 | 来源:发表于2019-11-02 09:43 被阅读0次

一、目的

  • 减少数据冗余,但不是完全没有。
  • 避免异常:插入异常,一个实体依赖另一个实体;更新异常,更新一个,其他的都要更新。

二、设计步骤:

  1. 需求分析:
    全面了解产品设计的存储需求、数据处理需求。
    数据的安全性和完整性。

  2. 逻辑设计:
    设计数据的逻辑存储结构。解决数据冗余和数据维护异常。

  3. 物理设计:
    表结构设计。
    关系型和非关系型数据库(缓存)。

  4. 维护优化:
    根据实际情况对索引和存储结构进行优化。

三、数据设计范式:

  • 第一范式:要求有主键,并且要求每一个字段原子性不可再分
  • 第二范式:要求所有非主键字段完全依赖主键,不能产生部分依赖
  • 第三范式:所有非主键字段和主键字段之间不能产生传递依赖
反范式设计:

空间换时间。
提高查询效率或者为了业务需求,使用冗余数据或反范式的设计。

范式:

优点:可以尽量地减少数据冗余,数据表更新快、体积小。
缺点:
查询需要多个表进行关联。
更难进行索引优化。

反范式:

减少表关联,更好地进行索引优化。
存在数据冗余和数据维护异常,对数据修改需要更多的成本。

四、物理设计

定义数据库、表及字段的命名规范。
可读性,表意性,长名原则
选择合适的存储引擎。

1. 命名

  • 小写加下划线。
  • 禁止使用mysql关键字。
  • 见名识意。
  • 临时表tmp开头,备份表bak开头,时间戳结尾。
  • 列名和列类型一致。

2. 为表的字段选择合适的数据类型。

  • 数字类型>日期或二进制>字符串。优先选择空间小的类型。
    IP这样的字符串可以考虑转换成数字。
  • varchar 用于存储边长字符串,只占用必要的存储空间。
    适用于:最大长度远大于平均长度,很少更新,多字符集。
  • char 定长,会删除末尾的空格,最大255
    适用于:长度相近,短字符串,经常更新。
  • 日期:
    datatime:与时区无关,占用8个字节。
    timestamp:时间戳,4个字节,依赖于时区。
    在行的数据修改时可以自动修改timestamp列的值。
    用int存储日志不如用timestamp。
  • 避免使用blob、text、enum类型。
  • 每个字段尽量具有not null 属性。

3. 其他考虑

  • 单表数据量控制在500万。
  • 谨慎使用分区。分区表示物理上是多个文件,逻辑是一个表。
  • 冷热数据分离。减少表的宽度,减少IO,保证热数据的缓存命中率。常用的数据放到一列。
  • 禁止在表中预留字段。
  • 控制索引,太少和太多都会影响效率。
  • 必须加主键,不要使用联合主键。不使用UUID、MD5、HSAH、字符串作为主键。
  • 最好用自增列做索引。

相关文章

网友评论

    本文标题:数据库性能优化:结构设计和优化

    本文链接:https://www.haomeiwen.com/subject/kbscbctx.html