几条MySQL技术面试题

本文列举了几个关于MySQL的面试问题,包括大字段的存储策略、InnoDB引擎行锁的实现方式、如何从备份中恢复特定数据库或表,以及大规模数据表的高效查询方法。针对大字段,权衡拆分与不拆分的利弊;InnoDB行锁依赖于索引;恢复操作可以通过选择性导入实现;高效查询策略依赖于索引和数据结构。

17、表中有大字段X(例如:text类型),且字段X不会经常更新,以读为为主,请问 
(1)、您是选择拆成子表,还是继续放一起; 
(2)、写出您这样选择的理由。 
答:拆带来的问题:连接消耗 + 存储拆分空间;不拆可能带来的问题:查询性能; 
如果能容忍拆分带来的空间问题,拆的话最好和经常要查询的表的主键在物理结构上放置在一起(分区) 顺序IO,减少连接消耗,最后这是一个文本列再加上一个全文索引来尽量抵消连接消耗 
如果能容忍不拆分带来的查询性能损失的话:上面的方案在某个极致条件下肯定会出现问题,那么不拆就是最好的选择

18、MySQL中InnoDB引擎的行锁是通过加在什么上完成(或称实现)的?为什么是这样子的? 
答:InnoDB是基于索引来完成行锁

例: select * from tab_with_index where id = 1 for update;
for update 可以根据条件来完成行锁锁定,并且 id 是有索引键的列,
如果 id 不是索引键那么InnoDB将完成表锁,,并发将无从谈起

19、如何从mysqldump产生的全库备份中只恢复某一个库、某一张表?

答案见:http://suifu.blog.51cto.com/9167728/1830651

20、开放性问题:一个6亿的表a,一个3亿的表b,通过外间tid关联,你如何最快的查询出满足条件的第50000到第50200中的这200条数据记录。 
1、如果A表TID是自增长,并且是连续的,B表的ID为索引

select * from a,b where a.tid = b.id and a.tid>500000 limit 200;

2、如果A表的TID不是连续的,那么就需要使用覆盖索引.TID要么是主键,要么是辅助索引,B表ID也需要有索引。

select * from b , (select tid from a limit 50000,200) a where b.id = a .tid;

 

https://blog.youkuaiyun.com/ww646904527/article/details/77826025

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值