1、数据库三大范式
第一范式:1NF是对属性的原子性约束,要求属性(列)具有原子性,不可再分解;(只要是关系型数据库都满足1NF)
第二范式:2NF是对记录的惟一性约束,表中的记录是唯一的, 就满足2NF, 通常设计一个主键来实现,主键不能包含业务逻辑。
第三范式:3NF是对字段冗余性的约束,它要求字段没有冗余。 没有冗余的数据库设计。
2、分库分表
垂直拆分:把表按模块划分到不同数据库表中;
水平切分:把一个表按照某种规则把数据划分到不同表或数据库里。(取摸算法)
3、如何从一个大项目中,迅速的定位执行速度慢的语句?(定位慢查询)
show status 查看MySQL服务器状态信息;
show variable 查看慢查询时间;
explain 查看sql执行过程
4、如何将慢查询定位到日志中?
在默认情况下,mysql不会记录慢查询,需要在启动mysql时候,指定记录慢查询:bin\mysqld.exe --safe-mode --slow-query-log [mysql5.5 可以在my.ini指定](安全模式启动,数据库将操作写入日志,以备恢复)
bin\mysqld.exe –log-slow-queries=d:/abc.log [低版本mysql5.0可以在my.ini指定]。先关闭mysql,再启动, 如果启用了慢查询日志,默认把这个文件放在my.ini 文件中记录的位置#Path to the database root datadir=" C:/ProgramData/MySQL/MySQL Server 5.5/Data/"
5、索引的分类及原理?
主键索引:主键是一种唯一性索引,但它必须指定为“PRIMARY KEY”。
唯一索引:索引列的所有值都只能出现一次,即必须唯一
全文索引(查询索引):
组合索引
索引的实现通常使用 B 树及 B+ 树
6、SQL优化
- 计数据库时:数据库表、字段的设计,存储引擎
- 利用好MySQL自身提供的功能,如索引等
- 横向扩展:MySQL集群、负载均衡、读写分离
- SQL语句的优化(避免全表扫描)及使用缓存技术