Mysql高级面试题整理(二)

143 阅读4分钟

「这是我参与11月更文挑战的第19天,活动详情查看:2021最后一次更文挑战」。

1. 设计索引的原则?

  • 选择唯一性索引
  • 为经常需要排序、分组和联合操作的字段建立索引
  • 为常作为查询条件的字段建立索引
  • 限制索引的数目
  • 尽量使用数据量少的索引
  • 数据量小的表最好不要使用索引
  • 尽量使用前缀来索引
  • 删除不再使用或者很少使用的索引

2. 什么情况下索引会失效?

  • 有or除全有索引(如果条件中有or,即使其中有条件带索引也不会使用,除非or条件每列全加索引);

  • 复合索引未用左列字段;

  • like以%开头;

  • 需要类型转换;

  • where中索引列有运算;

  • where中索引列使用了函数;

  • 如果mysql觉得全表扫描更快时(数据少);

3.Btree和Hash区别

Btree可以查找一定范围的数据

Hash只能用于相等比较,不能用于范围查找,也不能利用索引进行排序

4.什么是分布式、微服务、集群?

集群: 同一个业务,部署在多个服务器上(不同的服务器运行同样的代码,干同一件事) 集群是指将多台服务器集中在一起,每台服务器都实现相同的业务,做相同的事情。如果一台死机,另一台可以起作用。

分布式: 一个业务分拆多个子业务,部署在不同的服务器上(不同的服务器,运行不同的代码,为了同一个目的)。

微服务: 微服务的概念和分布式比较相似,微服务是一种架构风格。简单来说微服务就是很小的服务,小到一个服务只对应一个单一的功能。每个微服务仅关注于完成一件任务并很好地完成该任务,这个服务可以单独部署运行。 各个微服务之间是松耦合的,服务之间可以通过 RPC 来相互交互。每个微服务都是由独立的小团队开发、测试、部署,上线,负责它的整个生命周期。

5. SOA架构的优点和缺点

优点:

  • 动态扩容,增加服务不需要修改任何配置。

  • 服务下线,通过命令使服务下线。

  • 监控简单,有监控工具进行监控。

  • 运行时人工干预,运行时修改配置

缺点:

  • 整合难度大,编写和运维复杂.
  • 分布式事务问题,数据一致性问题,涉及多种中间件。
  • 对开发人员技术栈要求高.

6. 分布式+微服务架构带来了新的技术和新的问题?

微服务应用是分布式系统,由此会带来固有的复杂性。开发者需要在RPC或者消息传递之间选择并完成进程间通讯机制。

微服务架构缺点: 分布式事务的问题 提升了运维的难度(发版、问题排查、配置管理、监控) -->催生了Jenkins + ELK +Spring Config + Spring Admin + Docker 单体结构资源利用率比较高 性能降低。单体架构 函数都是内部调用,微服务的间通过REST、RPC等形式进行交互,通信的时延会受到较大的影响。

7. 数据库优化方案?

1、sql语句优化

2、数据结构优化

3、硬件优化:

CPU:个数、几核、线程数设置。

缓存(一二级)。

内存:增加。

硬盘存储(I/O性能)

网络: 底层传输协谇、增加带宽。

8.什么是存储过程?有什么优缺点?

存储过程是一个预编译好、放在数据库的一个SQL集合函数

优点:

存储过程是一个预编译的代码块,执行效率比较高。

存储过程在服务器端运行,减少客户端的压力 允许模块化程序设计,只需要创建一次过程,以后在程序中就可以调用该过程任意次,类似方法的复用 一个存储过程替代大量T_SQL语句 ,可以降低网络通信量,提高通信速率 可以一定程度上确保数据安全。

缺点:

调试麻烦(没有像开发程序那样容易)

可移植性不灵活(因为存储过程依赖于具体的数据库)

9.什么是视图,视图有什么作用?

视图:称作虚表,即虚拟的表,视图本身并不包含任何数据,它只包含映射到基表的一个查询语句,当基表数据发生变化,视图数据也随之变化。

作用:

  • 简化复杂查询;
  • 安全性,通过视图用户只能查询和修改他们所能见到的数据。