面试时:对于数据库的优化,或者想提高网站的并发性的时候,你会从哪些角度进行优化
问题:数据库的优化,网站的并发
构建------>直到变为庞杂的数据库
-
构建数据库表时我们就要考虑到日后的扩展问题和查询的快慢问题。
三范式原则:
第一范式:拆的不能再拆。
第二范式:出现大量的冗余数据。非主要的字段全部提出来,可以分表
第三范式:非主要的表中,有没有因为一个人的数据,丢掉了类型的信息。 -
建索引(index)。
主键是索引
唯一约束(unique)
常查询的字段建立索引,可以在把两个(多个)一起建立一个索引
会降低增删改的速率。
Q: 你有没有做过django的优化:通过模型类进行操作,所以我对模型类一定可以进行优化。我自己去手写sql
最左原则:尽量把含有索引的字段往前放。(顺序决定快慢)
联合查询的使用和建立联合索引时的顺序相同。 -
sql语句优化
where条件
不要用select *
能使用联合查询,就不使用子查询
外键:保证不同的表的关联性、完整性。级联:株连九族的用处。有额外的性能开销
数据量大的时候,不再使用外键。
慢查询工具链接:
https://flyerboy.github.io/2016/12/23/mysql_slow/
https://yemengying.com/2016/05/24/mysql-tuning/ -
引入缓存
redis memached -
读写分离(mysql本身实现的机制,通过配置文件)
主从同步;热备份。
主:用于写、删、改 master
从:用于读。 slave
热:两台机器都不宕机,可以进行数据同步。 -
分库分表(数据量很大时)
垂直分表(大表拆小表,查询时联合查询)
垂直分库(大库分小库,根据逻辑分为几个数据库)
水平分表(表的数据分成好几份)
水平分库(把每张表存放到专属的数据库,根据范围查询)
数据库索引
## 为什么:类二分法进行查找,B+树。
工作账号介绍
每天的工作:
1. 分析需求
2. 编写代码
3. 编写单元测试
4. 自测
5. 编写接口文档
6. 提测代码
进入到公司的时候:
1. emal
2. git gitlab 账号权限 rsa设置
3. vpn 虚拟私有网络 ssh远程链接 客户端软件,客户端账号、密码 配置文件、数据库账号。
4. python环境、框架、pycharm、测试环境的数据库