天天看点

mysql面试准备

存储引擎:MyISam,Innodb.MyISam不支持事物,不支持行锁,速度快,不支持外建索引,存储磁盘有三个文件,表结构,主键,数据。

Innodb:支持事物,支持行锁,存储磁盘两个文件,表结构,主键与数据一个文件。

存储的数据类型有两种:B-Tree与B+Tree.

B-Tree:节点与叶子节点,节点两端有指针,叶子节点没有指针。叶节点具有相同的深度。节点存储数据的个数叫做度。索引与数据是存储在一个二维数组里。在删除或插入数据时会破坏B-Tree的性质。

B+Tree:节点只存索引,这样在单位度下能更快的读取到数据。叶节点存储数据,没有指针,但是有相邻数据的箭头。

一般使用磁盘I/O的次数评价索引结构的优劣,B+Tree一般度都会大于100,所以h一般在3-5之间,目前最流行的是B+Tree结构

Innodb引擎推荐使用主键自增原则,这样才能顺序查找,提高了数据查询的速度,这是根据存储结构相关的。

数据库优化的建议:

1.主键自增,字段默认值不要为null,null是一种特殊数据需要单独存储浪费空间,并且查询只能使用is not null 或者使用is null查询全表扫描,查询性能不高。

2.对经常查询的数据加索引,联合索引要符合最左前缀原则使用。

3.避免使用 order by ,group by 这样的聚合函数,可以在业务方法里对数据处理。

4.mysql的事物隔离级别(读已提交,读未提交,可重复读,串行化serializable)

5.面试经常问,如果我们有几亿的用户,我们怎么进行数据库设计,水平分表,可以根据用户id取模进行数据负载均衡以及搭建集群读写分离的方案解决。(扩展性差)

6.对于经常查询一般不做修改的数据,可做成服务端缓存,修改了更新缓存。

7.对于统计的数据,如果对实时性能要求不高,可以定时查询放到一个统计表里。

继续阅读