ER图简介以及举例

ER图即实体关系模型,可以辅助进行数据库表设计。通过如下图标来描述实体关系之间的关系,然后通过ER图来转换为数据库的表结构。其中:

  • 长方形: 实体,对应一张实体,最终转化为一张数据库表。
  • 菱形:关系,一般用动词描述,在多对多关系中可以转换为一张表。
  • 椭圆: 属性,实体或者关系包含的属性,最终将对应表中的一列。

实体和属性比较简单,我们不多说,下边来看一下关系:

小技巧:对于确定关系的时候,请从左向右来描述一遍,然后再从右到左描述一遍来看一下。

  • 1对1

1对1关系比较简单,比如学生以及学生身份证号就是一对一的关系,那么只需要简历一张表即可。

  • 1对n

请看如下关系,学生和来源城市之间的关系。使用上述小技巧,来试一下,“学生来源于一个城市,一个城市可以为多个学生的来源”,所以学生对一个城市,一个城市对应多个学生,如图所示。

1对多关系可以转换为两张表,通过在“多”这侧添加“1”侧的唯一键来关联起来,即在学生表添加城市ID(city_id)来关联。上图转换为下边两张表“学生表”和“城市表”。

学生表:

城市表:

  • n对n

请看如下关系,学生和课程之间的关系。“一个学生需要学习多门课程,一门课程有许多学生学习”,所以一个学生对多个课程,一个课程对应多个学生,如下图所示。

多对多关系需要转化为至少三张表,两个实体表和一个关系表,关系表存储两个实体的对应关系,存储两个实体表的键即可。转化后的表为:学生表、课程表、学生课程表。

学生表:

课程表:

有了上边两张表,那么我们的关系表就咋办呢?比如我们让张三学习一下这两门课程。学生课程表如下:

OK,到此E-R图基本上就是这样了,按照标准来说,我们需要给实体加上属性,但是如果把属性都画上图会很乱,所以一般不会画出属性。对于属性还有个主键的问题,就是在属性加下划线即可,不再演示。关于其他问题以后再跟新这篇文章。

 

MySQL Query时间都去哪儿了

MySQL作为被广泛应用的关系型数据库,帮助大家完成数据存储、数据处理以及数据分析等相关工作。在使用MySQL过程中最常遇到的问题大约就是慢查询或者运算时间很长的问题,那么时间都去哪儿了呢?

使用SHOW PROFILE

MySQL提供的SHOW PROFILE语法,可以帮助我们分析查询执行的每个步骤极其花费的时间。我们可以通过执行set profiling=1来开启此功能。先让我们看个例子

select count(*) from user;
show profile;


通过show profile命令我们可以查看时间主要消耗在了Sending data阶段,Sending data状态描述的是读和处理SELECT涉及的行以及发送数据到客户端:

The thread is reading and processing rows for a SELECT statement, and sending data to the client. Because operations occurring during this state tend to perform large amounts of disk access (reads), it is often the longest-running state over the lifetime of a given query.

其他状态的解释请参考手册。通过分析查询每个步骤消耗的时间,我们可以有针对性的进行优化。让我们来查看另一个例子。

select * from user order by email desc limit 1000, 10;

show profiles;

show profile for query 2;


通过上边的例子,我们可以发现时间主要花到了排序上。

使用 EXPLAIN

我们可以使用EXPLAIN来获取关于查询执行计划的信息, EXPLAIN命令等价于DESCRIBE/DESC。EXPLAIN命令是查看查询优化器如何决定执行查询的主要方法。

EXPLAIN命令可以帮助我们查看查询我们的SQL语句可能用到的索引(possible_keys)以及影响的行数(rows),可以帮我们更好的定位慢的原因。每列值得具体解释请参考手册。此外EXPLAIN也可以看表结构。

目前MySQL提供的工具在分析查询性能定位上还是比较弱的,但是造成查询性能底下的原因还是比较明确的:就是访问的数据太多。那么通过调整索引结构、调整检索语句的条件以及重构查询等均能收到不错的优化效果。

通过上述两个工具我们基本上能够确定我们的SQL在干什么以及消耗了多少时间,也能够了解查询优化器为我们做的一些工作,更具它们为我们提供的信息,我们可以调整我的查询方式来提高我们的查询效率。