「这是我参与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.什么是视图,视图有什么作用?
视图:称作虚表,即虚拟的表,视图本身并不包含任何数据,它只包含映射到基表的一个查询语句,当基表数据发生变化,视图数据也随之变化。
作用:
- 简化复杂查询;
- 安全性,通过视图用户只能查询和修改他们所能见到的数据。