1. 数据库理论
1.1. 简单介绍一下关系数据库三范式?
参考
- https://blog.csdn.net/asdfsadfasdfsa/article/details/83963046
- https://www.cnblogs.com/gdwkong/p/9012262.html
首先讲一下什么是范式,范式就是规范,就是设计关系(表)时要遵循的规范
第一范式(1NF):字段(列)具有原子性,不可再分1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21有一列可以拆分为firstName和lastName,不满足1NF
+---------+-----------------------+
| id | firstName , lastName |
+---------+-----------------------+
| 1 | Abbot , aa1 |
| 2 | Doris , aa2 |
| 3 | Emerson , aa3 |
| 4 | Green , aa4 |
| 5 | Jeames , aa5 |
+---------+-----------|-----------+
解决办法是,拆分为多列,就满足1NF了
+---------+-----------------------+
| id | firstName | lastName |
+---------+-----------------------+
| 1 | Abbot | aa1 |
| 2 | Doris | aa2 |
| 3 | Emerson | aa3 |
| 4 | Green | aa4 |
| 5 | Jeames | aa5 |
+---------+-----------|-----------+
二范式(2NF):满足1NF,且非主属性完全依赖于主键,消除了部分依赖
三范式(3NF):满足2NF,不存在传递依赖
反三范式:有的时候为了效率,可以设置重复或者可以推导出的字段
2. 数据库优化
2.1. 有没有做过数据库优化方面的事情?
做过MySQL数据库的优化
定位:查找、定位慢查询
优化手段:
- 创建索引:创建合适的索引,我们就可以现在索引中查询,查询到以后直接找对应的记录。
- 分表:当一张表的数据比较多或者一张表的某些字段的值比较多并且很少使用时,采用水平分表和垂直分表来优化
- 读写分离:当一台服务器不能满足需求时,采用读写分离的方式进行集群。
- 缓存:使用Redis来进行缓存
2.2. 你是怎么查询并定位慢查询的?
在项目自验项目转测试之前,在启动mysql数据库时开启慢查询,并且把执行慢的语句写到日志中,在运行一定时间后。通过查看日志找到慢查询语句