MySQL面试常见题目(一)

原文地址:MySQL面试常见题目(一)

1、MySQL使用过程中遇到过死锁问题吗?如何解决的?

操作步骤如下:

  1. 通过【show engine innodb status;】指令查看死锁日志。

  2. 找出死锁SQL。

  3. 分析SQL加锁情况。

  4. 模拟死锁案发。

  5. 分析死锁日志。

  6. 分析死锁结果。

2、日常工作中是怎么优化SQL的?

可从如下几个方面来聊:

  1. 加索引,提高查询速度。

  2. 避免返回不必要的数据,减少数据量。

  3. 适当分批量进行查询,减少单次查询压力。

  4. 优化sql结构,使得查询更加合理。

  5. 分库分表。

  6. 读写分离。

3、分库分表方案?

大体如下几个方面:

  1. 水平分库:以字段为依据,按照⼀定策略(hash、range等),将⼀个库中的数据拆分到多个库中。

  2. 水平分表:以字段为依据,按照⼀定策略(hash、range等),将⼀个表中的数据拆分到多个表中。

  3. 垂直分库:以表为依据,按照业务归属不同,将不同的表拆分到不同的库中。

  4. 垂直分表:以字段为依据,按照字段的活跃性,将表中字段拆到不同的表(主表和扩展表)中。

4、常用分库分表中间件?

  1. sharding-jdbc(当当)

  2. Mycat

  3. TDDL(淘宝)

  4. Oceanus(58同城数据库中间件)

  5. vitess(Google 开发的数据库中间件)

  6. Atlas(Qihoo 360

5、分库分表可能遇到的问题?

  1. 事务问题:用分布式事务解决。

  2. 跨节点join的问题:分两次查询解决。

  3. 跨节点的count,order by,group by以及聚合函数问题:分别在各个节点上得到结果后在应⽤程序端进行合并。

  4. 数据迁移,容量规划,扩容等问题。

  5. ID问题:数据库切分后,不再依赖数据库自身的主键生成机制,可考虑UUID。

  6. 跨分片的排序分页问题(后台加大pagesize处理)。

6、 InnoDB与MyISAM的区别?

  1. InnoDB支持事务,MyISAM不支持事务。

  2. InnoDB支持外键,MyISAM不支持外键。

  3. InnoDB支持 MVCC(多版本并发控制),MyISAM则不支持。

  4. select count(*) from table 时,MyISAM更快,因为它有个变量保存整个表的总行数,可直接读取,InnoDB需全表扫描。

  5. Innodb不支持(5.7后支持)全文索引,MyISAM支持全文索引。

  6. InnoDB支持表、行级锁,MyISAM支持表级锁。

  7. InnoDB表必须有主键,MyISAM可以没有主键。

  8. Innodb表需要更多的内存和存储,MyISAM可被压缩,存储空间较小。

  9. Innodb按主键大小有序插⼊,MyISAM记录插⼊顺序是按记录插⼊顺序保存。

  10. InnoDB提供了具有提交、回滚、崩溃恢复能力的事务安全,与MyISAM比InnoDB写效率差,且会占用更多的磁盘空间以保留数据和索引。

  11. InnoDB 属于索引组织表,使用共享表空间和多表空间储存数据。

  12. MyISAM用 .frm 、 .MYD 、 .MTI来储存表定义,数据和索引。

7、分页查询limit偏移量过大如何解决?

方案一:如果id是连续的,可返回上次查询的最大记录(偏移量),之后再往下limit。

如下:

select id,name from employee where id>1000000 limit 10

方案二:在业务允许的情况下限制页数,因为绝大多数⽤户都不会往后翻太多。

方案三:order by + 索引(ID为索引)。

如下:

select id,name from employee order by id limit 1000000,10SELECT a.* FROM employee a, (select id from employee where 条件 LIMIT 1000000,10 ) b where a.id=b.id

方案四:用延迟关联或者子查询优化过多分页场景,可先快速定位需要获取的id段,然后再关联。


至此,本次分享就结束了,后期会慢慢补充的。

以上仅为个人观点,不一定准确,能帮到各位那是最好的。

好啦,到这里本文就结束了,喜欢的话就来个三连击吧。

扫码关注公众号,获取更多优质内容。

 

猜你喜欢

转载自blog.csdn.net/luyaran/article/details/121120275