【MYSQL的Q&A】

1.mysql表级锁,行级锁,间隙锁的区别?

innodb引擎在无法通过索引查询数据时,默认使用表级锁对当前操作的表进行加锁,优点是加锁快,不会出现死锁,缺点是粒度过大,容易出现锁冲突;而如果可以通过索引查询时则使用行级锁,需要注意的是行级锁是基于索引产生的,所以锁住的是索引键而不是行记录,可能由于锁住的主键和非主键相互等待导致死锁

2.mysql的binlog,redo log,undo log,slow log,err log的作用、原理以及实现?

binlog二进制日志文件,作为操作语句对数据库的兜底,缓存到一定次数和大小同步到磁盘

redo log重做日志,在语句开始写入binlog时,处于prepare状态,待写入成功后,改为commit状态,将操作执行入数据库中

undo log 回滚日志,在写入bin log或redo log时出错,进行回滚的操作记录

slow log 慢查询日志

err log 错误日志

3.mysql的查询优化方法有哪些?

从select开始讲起,禁止使用*查询会使查询时索引失效导致全表查询;查询字段能通过复合索引覆盖,减少回表操作;依据最左匹配原则,查询字段与复合索引顺序保持一致,减少索引下推动作的产生;limit控制返回行数

关联from,inner join,left join减少表层级关联,尽可能保证在3层关联以内,第一张表的所属行数尽可能少,因为mysql解释器是自上向下、自左向右的

where语句的处理中同样需要复合上述条件,字段值和顺序尽可能和复合索引贴合,尽可能不适用函数和范围查询

4.mysql的索引有哪些,分别用在什么地方?

聚簇索引:innodb引擎的数据存储结构,每个非叶子节点只存储响应索引,在叶子节点才存储响应的数据包括主键、事务ID、回滚指针、非主键列

复合索引:除主键索引外,同样可以减少对全表查询的操作,原则上讲可定位大类的字段尽可能向左放,每次存放数据同时会维护复合索引消耗性能,所以尽可能减少个数

前缀索引:专门针对大字段查询

5.mysql的结构是怎么样的?

表>段>区>页>槽

区为1M,分为64页,每页16K,其中包括文件头,页头,虚记录,记录堆,页目录,自由空间链表,未分配空间,页尾,槽位9项数据,划分成多个组每个组即为一个槽,将地址偏移量存放数页目录中

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值