数据库结构优化介绍

it2022-05-05  177

介绍了很多对数据库性能会带来的因素,包括服务器的硬件,操作系统,MYSQL服务器配置等等,但是总的来说, 对数据库性能影响最大的呢,实际上就是数据库的结构了

良好的数据库逻辑设计和物理设计是数据库设计获得高性能的基础,会要求我们在设计数据库时,不能只考虑 数据库需要,还要考虑我们将来,要怎样来使用我们数据库来编写,查询语句才能得到我们的数据,所以我们也要使用我们的 查询语句呢,来设计我们的数据库结构,结构的设计呢,最好是使得数据库的查询语句呢,尽量的简单,为了达到这个目的, 通常我们需要考虑很多的因素,如果我们根据查询对表进行反范式化的设计,那么可能是可以加快一些语句的查询速度的, 范式又会对其他查询语句造成性能上的影响,所以我们在进行数据库设计时,一定要平衡各方面的利益,以达到最好的效果, 总的来说呢,我们进行数据库设计呢,希望可以达到以下几个目的的,首先我们进行数据库结构设计呢,期望达到的第一个 目的呢,减少数据的冗余,那么什么是数据冗余呢,数据冗余就是指,相同的数据,在多个地方呢存在,或者说,表中的某个列呢, 由其他列来计算得到,这样的数据呢就是冗余,这应该很好理解,但是有一点需要注意,我们这里说的是要尽量减少数据的冗余, 而不是要完全的没有冗余的数据,因为在一些情况下呢,必要的数据冗余呢,也是必须的,在我们的下面数据设计中呢,大家就会 看到,数据库设计的第二个目的呢,就是要避免在数据维护中,出现插入,更新,删除异常,对于数据维护的异常呢,理解起来就不 像数据冗余那么容易了,我们可能需要分别来为大家讲解一下,所谓插入异常呢,从定义上来看呢,是这样的,如果表中的某个实体, 随着另一个实体的存在而存在,也就是说,如果缺少了某个实体,就无法表示另一个实体,那么这样设计出来的表呢,插入异常,是不太 好理解,我们来看一个实际的表就清楚了

我们进入到dbs数据库 use dbs; 这里呢我们有这样的一张表 show create table selectcourse\G

现在这个selectcourse的表结构,这张表记录了每一个学生,和讲课的名称,和学分,其中学号和课程名称呢, 是这个表的主键,也就是说,一个学生只能选择相同的课程一次,我们下面来看一下这个表的数据,这样理解起来可能就会 更加的直观 select * from selectcourse;

现在这个表中一共存在了4行数据,首先大家可以看到这个表是存在数据冗余问题的,其中多次出现了学生的姓名,生日这些信息, 另外没门课程的学分呢,也是冗余的,那么什么是插入异常呢,如果我们要新增加一门课程,语文,并且学分是10分,但是还没有任何 学生来选择这门课程,那么我最后可以单独的把这个信息插入到这个表中,我们可以来看一下,我们insert into,selectcourse这张表, 其中我们只想插入课程信息,课程的名称和课程的学分,比如我们要插入语文课,他的学分是10分 insert into selectcourse(course_name,course_point) values('语文',10);

可以看到,这里就爆出了一个异常,学号这一列是没有默认值的,并且由于学号是我们主键的一部分,所以不能为空, 所以这里就产生了刚才所说的插入异常,在没有学生选择这门课的情况下,是无法把新插入的课程,插入到表中的, 搞清楚了数据的插入异常,继续往下看,那么什么是数据的更新异常呢,更新异常是这样子的,如果更改表中的某个 实体的单独属性时,需要对多行进行更新,那么这个表就存在更新异常,依然让人不太好理解,还是回到我们的演示系统中 来看一下

如果这个时候要更新数学的学分为15,那么我们要同时更新多少行数据呢,我们来看一下,现在我们数学这门课程的学分, 等于15分 update selectcourse set course_point = 15 where course_name = '数学';

这个时候我们同时更新了两行数据,如果我们选择这门课程的学生越多,表更新的数据也会越多,这就是更新异常的 表现,可以看到数据的更新异常,数据的冗余,是有很大的联系的,那最后我们再来看看什么是删除异常,其实删除异常和 插入异常,看上去差不多,如果我们删除了某一个表中的实体,则会导致其他实体的消失,这就是删除异常,以我们的演示 来说吧,如果我们删除了选择数学的选课记录,那是不是数学这么课程的相关信息也就不存在了呢,是这样的,这就是删除数据 的异常体现,那我们对数据库进行设计呢,就要尽量避免上面所说的异常,如果要想避免这些数据的异常,那么最好的方法呢, 按照范式化来对表进行设计,这个呢我们会说到,我们对数据库结构优化的第三个目的是什么

节约数据库的存储空间,那这个就比较好理解了,如果我们减少了数据冗余,就必然会节约很多的存储空间, 不要小看存储空间,对于大的数据库来说,可能是可以节约很多空间的,当然了,我们对数据库设计那就是提高 查询的效率,这一点在项目当中一定会有引用,这里就不多说了

 


最新回复(0)