面试场景汇总.txt
UP 返回
此笔记主要汇总徐庶抖音视频
1.动态查询条件如何优化
首先分析出比较常用的几个字段,建立联合索引
对于最常用的字段,比如分类,作为索引的第一个
为了不使索引失效,可以在业务允许的情况下,为第一个查询条件设置默认值
如果不可以用默认值,可以分库分表,比如根据类型 时间分表
或者使用es 大数据的形式进行查询,这种不受索引限制
2.MySQL隔离级别 MVCC(Multiversion Concurrency Control 多版本并发控制器)
MYSQL并发会产生的问题有:
脏读——读已提交(行锁,读不会加锁)
不可重复读——重复读(行锁,读和写都会上锁)
幻读——串行化(表锁)
MySQL有4种隔离级别
1.读未提交。会产生脏读,通过设置 读已提交 解决该问题
!!@@202502201.img_1484_797_1@@!!
2.读已提交。会产生不可重复读,可以设置 可重复读 解决
!!@@202502202.img_1485_684_1@@!!
3.可重复读。会产生幻读的问题,可以设置 串行化 解决,相当于读取表时加表锁,其他事务如果需要对这张表增删改就得等待,并发性能很低
!!@@202502205.img_1211_546_1@@!!
4.串行化
MYSQL默认可重复读,oracle默认读已提交
以读已提交为例,虽然采用了行锁,但是读取却并未加锁,不然修改时读取也得等待:
MYSQL除了表本身的字段,还会额外维护几个字段:
id 主键(不重要,与本例无关)
DB_TRX_ID 用来存储最近插入修改的事务id。删除也视为修改
DB_ROLL_PTR 回滚指针,指向这条记录的上一个版本数据
DOWN 返回