面试问到MyCat看这一篇就够了

一、使用索引的优缺点?

索引就像书的目录一样可以非常快速的定位到书的页面
优点:提高查询效率,没有索引的话查询数据库表会进行全表扫描
缺点:插入慢,占用硬盘空间

二、Myisam与Innodb B+树的区别?

Myisam Innodb
叶子节点 Value存放的是数据地址,通过地址去查询数据 Value存放的是数据
优点 创建索引的时候速度比较快 查询数据比较快
缺点 查询数据比较慢 创建索引比较慢

三、B+树中叶子节点和非叶子节点的区别?

叶子节点 非叶子节点
区别 有Key和Value 只有Key

四、MySQL中的四种实现索引的方法比较

Hash 平衡二叉树AVL B树 B+树
优点 根据hash算法查询速度非常快 查询效率高 节点可以存放多个数据,减少了树的高度和IO次数,查询效率较好 继承了B树的特征,多了叶子节点和非叶子节点,叶子节点间顺序存储,查询效率快且范围查询也快
缺点 数据存放是无序的,不能进行范围查询 可以范围查询,但是需要回旋,效率很低 支持范围查询,也是会回旋,效率也不高 因为有冗余节点数据,会比较占硬盘大小,但是优点远大于缺点

五、MySQL主从复制原理

在这里插入图片描述

六、MySQL分片集群原理

在这里插入图片描述

七、MySQL分片集群如何保证ID唯一?

1、UUID:不是自增的
2、雪花算法:不是自增的
3、设置步长:一开始就要定义好起始值和步长,起始值为1,2,3…步长为分片数量

八、MyCat介绍

阿里的开源框架,基于java语言编写的
反向代理真实数据库
读写分离:实现routingDatasource接口,配置动态数据源,使用aop区分读写操作
分片集群:水平拆分数据库表

Mycat有三个配置文件:
1、server.xml:Mycat的配置文件,配置账号密码等
2、schema.xml:Myvat对应的物理数据库和数据库表的配置
3、rule.xml:Mycat分片(分库分表)规则

九、水平拆分和垂直拆分的区别

垂直拆分:比如会员服务对应会员数据库和微信服务对应微信数据库,缺点:需要通过接口的形式进行通讯,不能跨库查
水平拆分:一张表存放在多个数据库中,比如有6条数据,3个数据库,每个数据库存放2条数据,使用mycat中间件同时查到三个库的数据,取模存放数据

十、多数据源与动态数据源的区别?

多数据源:分包形式
动态数据源:动态数据在jvm进行不断的切换

十一、SpringBoot动态数据源切换原理

流程:
1、使用AOP判断业务逻辑层方法的前缀,如果前缀为比如select、get、find等,findUser
2、如果是为写操作的时候会给RoutingDataSource传入一个key

配置:
1、创建读和写的数据源
2、将数据源注册到RoutingDataSource
3、只用AOP技术拦截业务逻辑层方法,判断方法的前缀是否需要读或者写

注意:
1、数据源是以Map的形式放在RoutingDataSource中的
2、使用Order(0)注解使得aop执行在事务之前

十二、Mycat实现水平分片9种策略

1、地区:通过客户端传的参数来判断地区,枚举算法,枚举文件
2、取模:根据id%数据库集群数量

十三、Mycat如何同时查询分表分库后的全部数据?

把select *from user
转换成
select * from db1_user
select * from db2_user
select * from db3_user
三条查询

如果带有where id = 1的情况下,只需要发送一条查询语句。因为1%3=1,直接从第二个数据库查

分页查询
select * from user limit 0,2
随机从一个库中进行分页查询,发送三条语句,将查询出的数据进行汇总,随机返回一组数据。
select * from user order by id desc limit 0,2
取最大的两个

十四、ShardingJdbc

当当网的开源数据库中间件

实现读写分离原理:
1、需要在配置文件配置读写分离jdbc连接全部交给ShardingJdbc,主数据库与从数据库采用二进制文件实现数据同步
2、ShardingJdbc会自动判断sql语句类型(DML或DQL),如果是DML语句的话会湖区主的jdbc连接配置进行发送请求,如果是DQL语句的话,获取从的jdbc连接发送请求

DML create/delete/update/inster

十五、ShardingJdbc与MyCat的区别

MyCat拦截客户端(dao)的所有Jdbc请求,统一转发到真实的数据库

都是解析sql,通过路由规则改写sql语句

  • ShardinJdbc是一个Jar形式,在本地应用层重写Jdbc原生的方法,实现数据库分片形式
  • Mycat属于服务端数据库中间件
  • ShardingJdbc是一个本地的数据库中间件
    有点类型ribbon与nginx实现负载均衡的区别

十六、索引为什么会失效?注意哪些事项?

十七、Mysql如何定位慢查询

十八、SQL语句优化

十九、半行同步和并行同步的区别?

二十、

二十一、

二十二、

二十三、

二十四、

二十五、

二十六、

二十七、

二十八、

二十九、

三十、

三十一、

三十二、

三十三、

三十四、

1、配置文件形式
2、实现指定接口
需要开启慢查询
默认语句在10秒内没有响应就是慢查询
从指定日志文件中读取

分片=分表分库

主从,分表分库

索引什么时候会进行IO操作

机械硬盘和固态硬盘的区别?

数据结构Hash、平衡二叉树、B树、B+树的区别?
Hash:数组长度为N,Hash值为Hash(name)=X,则存放位置为X%N的余数

平衡二叉树(AVL 三位科学家发明的):
会取中间值,比如插入1,2,3,平衡之后2会为根节点,1为左子树,3位右子树

比如主键索引,key就为主键
存在同时为叶子节点和非叶子节点的,在树的最底层

因为索引是持久化的到硬盘的,所以要查询数据要把索引从硬盘中读取出来进行比较(IO),需要消耗cpu资源
无论是shardingjdbc或者mycat都不能实现主从复制,是数据库本身自带的
磁盘IO性质
磁盘(I/O)–>内存(读到内存,在内存做比较) -->CPU
IO:把硬盘读到内存
建立索引的话会生成文件,数据多索引多文件也多

B+树的节点到底存放多少?

索引的失效问题

MySQL主从复制数据同步是多久执行一次?还是自己配置的?

监听binlog文件,每次dmlsql都同步?

mycat实现读写分离(通过权限)和分表分库

读写分离两种实现方式:
1、mycat,拦截所有jdbc请求,通锅select,update区分,路由分析,客户端通过公网ip去访问mycat,mycat上有虚拟数据库
2、动态数据源aop,拦截service方法
通过find等自己设置的方法头区分

动态数据源与多数据源的区别?
动态数据源包含多数据源

SpringBoot连接Mycat中的虚拟数据库,通过Mycat去访问其他数据库
云数据库
阿里云、腾讯云等,自动做了很多配置

发布了53 篇原创文章 · 获赞 2 · 访问量 1867

猜你喜欢

转载自blog.csdn.net/qq_42972645/article/details/104679061
今日推荐