BATJTMD 面试必问的 MySQL ,三歪一个都不会
Java3y
共 10832字,需浏览 22分钟
·
2020-08-08 19:55
本文公众号来源:程序员囧辉 作者:囧辉 本文已收录至我的GitHub
主要用于解决脏读、不可重复读、幻读。
脏读:一个事务读取到另一个事务还未提交的数据。
不可重复读:在一个事务中多次读取同一个数据时,结果出现不一致。
trx_ids:生成 ReadView 时当前系统中活跃的事务 Id 列表,就是还未执行事务提交的。 up_limit_id:低水位,取 trx_ids 中最小的那个,trx_id 小于该值都能看到。 low_limit_id:高水位,生成 ReadView 时系统将要分配给下一个事务的id值,trx_id 大于等于该值都不能看到。 creator_trx_id:生成该 ReadView 的事务的事务 Id。
二狗:小伙子不错,大活都给你搞下来了,接下来看下基础扎不扎实。什么是索引?
非叶子节点:key + 指针 叶子节点:数据行(key 通常是数据的主键)
二狗:说说数据库的行锁和表锁?
二狗:InnoDB 的行锁是怎么实现的?
id:标识符 select_type:查询的类型 table:输出结果集的表 partitions:匹配的分区 type:表的连接类型 possible_keys:查询时,可能使用的索引 key:实际使用的索引 key_len:使用的索引字段的长度 ref:列与索引的比较 rows:估计要检查的行数 filtered:按表条件过滤的行百分比 Extra:附加信息
const:通过主键或唯一键查询,并且结果只有1行(也就是用等号查询)。因为仅有一行,所以优化器的其余部分可以将这一行中的列值视为常量。 eq_ref:通常出现于两表关联查询时,使用主键或者非空唯一键关联,并且查询条件不是主键或唯一键的等号查询。 ref:通过普通索引查询,并且使用的等号查询。 range:索引的范围查找(>=、<、in 等)。 index:全索引扫描。 All:全表扫描
首先用 explain 分析语句的执行计划,查看使用索引的情况,是不是查询没走索引,如果可以加索引解决,优先采用加索引解决。 分析语句,看看是否存在一些导致索引失效的用法,是否 load 了额外的数据,是否加载了许多结果中并不需要的列,对语句进行分析以及重写。 如果对语句的优化已经无法进行,可以考虑表中的数据量是否太大,如果是的话可以进行垂直拆分或者水平拆分。
确保事务提交后 binlog 至少传输到一个从库 不保证从库应用完这个事务的 binlog 性能有一定的降低,响应时间会更长 网络异常或从库宕机,卡主主库,直到超时或从库恢复
各类知识点总结
下面的文章都有对应的原创精美PDF,在持续更新中,可以来找我催更~
扫码或者微信搜Java3y 免费领取原创思维导图、精美PDF。在公众号回复「888」领取,PDF内容纯手打有任何不懂欢迎来问我。
原创电子书
原创思维导图
评论