# 表结构设计优化


<!--more-->


## 1. 设计中间表

设计中间表**，一般针对于**统计分析功能，或者实时性不高的需求（OLTP、OLAP）

## 2. 设计冗余字段

为减少关联查询，创建合理的**冗余字段**（创建冗余字段还需要注意**数据一致性问题**）

## 3. 拆表

对于字段太多的大表，考虑**拆表**（比如一个表有100多个字段）

对于表中经常不被使用的字段或者存储数据比较多的字段，考虑拆表

## 4. 主键优化

每张表建议都要有一个主键（**主键索引**），而且主键类型最好是**int类型**，建议自增主键（**不考虑分布式系统的情况下** 雪花算法）。

## 5. 字段的设计

- 数据库中的表越小，在它上面执行的查询也就会越快。

  因此，在创建表的时候，为了获得更好的性能，我们可以将表中字段的宽度设得尽可能小。

- 尽量把字段设置为**NOT NULL**，这样在将来执行查询的时候，数据库不用去比较NULL值。

- 对于某些文本字段，例如“省份”或者“性别”，我们可以将它们定义为ENUM类型。

  因为在MySQL中，ENUM类型被当作数值型数据来处理，而数值型数据被处理起来的速度要比文本类型快得多。这样，我们又可以提高数据库的性能。

