数据库

MySQL优化数据库结构是什么?这3点看完你就清楚了

2020-08-25 17:05:50 | 来源:中培企业IT培训网

在众多数据库中,MySQL也是我们比较常见的数据库。MySQL数据库是一个安全,跨平台,高效的数据库系统,与主流编程语言紧密集成在一起。那么MySQL优化数据库结构是什么?合理的数据库结构不仅可以使数据库占用更少的磁盘空间,而且可以使查询更快。数据库结构是否合理,需要考虑是否存在冗余,查询和更新表的速度,表中字段的数据类型是否合理等,下文是详细介绍。

  一、分解表

有些表在设计时设置了很多的字段,而有些字段的使用频率非常低。这样当这个表的数据量很大时,查询数据的速度就会很慢。下面介绍优化这种表的方法。

对于这种情况,我们可以将这些使用频率较低的字段分离出来形成新表。

  例 1

在 student 数据表中有很多字段,其中 comment 字段用来存储学生的备注信息。备注信息的内容特别多,但是该字段很少使用。这时就可以分解出另外一个表。

分解出的表为 student_comment,表中存储 2 个字段,分别为 id 和 comment。其中,id 为学生的学号,comment 为学生备注信息。student_comment 的表结构如下:

mysql> DESC `student_comment`;

+---------+---------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+---------+---------+------+-----+---------+-------+

| id | int(11) | NO | PRI | NULL | |

| comment | text | YES | | NULL | |

+---------+---------+------+-----+---------+-------+

2 rows in set (0.00 sec)

如果需要查询某个学生的备注信息,可以使用学号(id)来查询。如果需要将学生的学籍信息与备注信息同时显示,可以使用表连接查询 student 表和 student_comment 表,查询语句如下:

SELECT * FROM student, student_comment WHERE student.id=student_comment.id;

通过以上方法,可以有效的提高 student 表的查询效率。

  二、增加中间表

表连接会降低数据库的查询速度,所以对于经常使用表连接查询的表,我们可以建立中间表来提高查询速度。下面介绍增加中间表的方法。

首先分析经常需要同时查询哪几个表中的哪些字段,然后将这些字段建立一个中间表,并将原来那几个表的数据插入到中间表中,之后就可以使用中间表来进行查询和统计了。

  例 2

下面有两个数据表,分别是 student(学生)表和 score(分数)表。这两个表的结构如下:

mysql> DESC student;

+---------+-------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+---------+-------------+------+-----+---------+-------+

| id | int(11) | NO | PRI | NULL | |

| name | varchar(20) | YES | | NULL | |

| sex | varchar(4) | YES | | NULL | |

| birth | date | YES | | NULL | |

| address | varchar(50) | YES | | NULL | |

+---------+-------------+------+-----+---------+-------+

5 rows in set (0.00 sec)

mysql> DESC score;

+--------+-------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+--------+-------------+------+-----+---------+-------+

| id | int(11) | NO | PRI | NULL | |

| stu_id | int(11) | NO | MUL | NULL | |

| c_name | varchar(20) | YES | | NULL | |

| grade | int(11) | YES | | NULL | |

+--------+-------------+------+-----+---------+-------+

4 rows in set (0.00 sec)

实际应用中,经常需要查询学生的学号、姓名和成绩。对于这种情况,我们可以创建一个 temp_score 表。temp_score 表中存储 3 个字段,分别是 id、name 和 grade。

创建 temp_score 的 SQL 语句如下:

mysql> CREATE TABLE temp_score(

-> id INT NOT NULL,

-> name VARCHAR(20) NOT NULL,

-> grade FLOAT

-> );

Query OK, 0 rows affected (0.00 sec)

然后从 student 表和 score 表中将记录导入到 temp_score 表中。INSERT 语句如下:

INSERT INTO temp_score SELECT student.id, student.name, score.grade

FROM student, score WHERE student.id=score.stu_id;

将这些数据插入到 temp_score 表中以后,可以直接从 temp_score 表中查询学生的学号、姓名和成绩。这样就省去了每次查询时进行表连接,提高了数据库的查询速度。

  三、增加冗余字段

一般情况下,设计数据库时应尽量让表符合三大范式。但是,有时为了提高查询速度,可以有意识地在表中增加冗余字段。下面介绍通过增加冗余字段来提高查询速度的方法。

表的规范化程度越高,表与表之间的关系就越多,查询时也就经常需要在多个表之间进行连接查询,而连接操作会降低查询速度。例如,学生的信息存储在 student 表中,院系信息存储在 department 表中。通过 student 表中的 dept_id 字段与 department 表建立关联关系。

如果要查询一个学生所在系的名称,就必须从 student 表中查找学生所在院系的编号(dept_id),然后根据这个编号去 department 查找系的名称。这个连接查询会浪费很多的时间。因此可以在 student 表中增加一个冗余字段 deptname,用来存储学生所在院系的名称。这样就不用每次都进行连接操作了。

综上所述,MySQL优化数据库结构是什么相信大家已经清楚了吧,想了解更多关于MySQL数据库的信息,请继续关注中培伟业。