mysql基础面试

mysql基础

1 索引

帮助数据库实现高效获取数据的数据结构

创建索引:

		1 把区别度高的作为索引
		
		2 遵循最左前缀匹配原则
		
		3 只用做条件的列建索引,不然会拖慢插入效率
		

常见的mysql数据结构一般是两种:Hash和b + tree索引,Innodb用的是 b + tree

  • b + treeHash有什么区别?
Hash底层是哈希表,哈希表是一种以key-value存储的数据结构,所以是无序的

1 对于区间查询要全局扫面,比较适合等值的查询场景

2 不能按照索引排序

3 如果有大量重复键值,效率会很低,因为会发生键值对碰撞问题

4 不支持多列联合索引的最左匹配规则

b + tree 是一种多路平衡查询树,叶子节点是有序的,左子节点 < 父节点,父节点 < 右子节点,所以范围查询时,不需要做全表扫描
  • b + tree的叶子节点可以存什么?有什么区别?聚簇索引和非聚簇索引?
可以存整行数据,也可能是主键的值

叶子节点中存整行数据的是主键索引,也称之为聚簇索引

叶子节点中存索引的值是普通索引,也称之为非聚簇索引

聚簇索引查询效率更高,因为叶子节点中直接是要查询的数据;

而非聚簇索引,叶子节点中查到的是索引的值,我们要按照索引的值,再查一次;

覆盖索引时,不用回表
  • 联合索引
把经常作为where 条件的字段设置索引

联合索引时,把识别度高的放在前边,因为mysql索引查询遵循最左前缀匹配原则:最左优先,在检索数据时从索引的最左端开始匹配。(k1, k2, k3)

索引,相当于k1, (k1, k2), (k1, k2, k3)三个索引

2 事物

  • 事物的基本要素
1 原子性:事物开始,要么做完,要么不做,中间出问题会回滚

2 一致性:事物从开始到结束,数据的完整性约束没别破坏。a向b转账,a减钱,b不能不加钱

3 隔离型:同一时间只能有一个事物请求同一条数据

4 持久性:事物结束,保存到数据库的数据不能回滚
  • 事物的隔离级别
1 读未提交:未提交的数据会被读,如果回滚,脏读

2 读已提交:提交的数据才会读,但是会造成重复读结果不一样,不能重复读,Oracle默认隔离级别就是这个

3 可重复读:事物没结束,写入的数据,不会被读,重复的读,结果是一样的。mysql默认是这个

4 序列化(串行化):上边3个没解决幻读的问题,一个事物新增一条数据的过程中,另一个事物新增了一条数据,然后第一个事物新增不上
posted @ 2020-10-29 15:55  tianzhh_lynn  阅读(89)  评论(0编辑  收藏  举报