当前位置: 首页 > news >正文

JAVA面试八股文一(mysql)

  1. B-Tree和B+Tree区别

共同点;一个节点可以有多个元素, 排好序的

不同点:B+Tree叶子节点之间有指针,非叶子节点之间的数据都冗余了一份在叶子节点

B+Tree是B-Tree 的升级

  1. mysql什么情况设置了索引,但无法使用

a.没符合最左原则

b.字段进行了隐式数据转化

c.走索引没有全表扫描效率高

  1. 索引的基本原理

把无序的数据变成有序的查询

a.把创建了索引的列的内容进行排序

b.把排序结果生成倒排表

c.在倒排表上拼上数据地址链

d.查询的时候先拿倒排表内容没在取数数据链,从而拿到具体数据

  1. 索引设计原则

a.适合索引的列出现在where中的列,或连表查询的指定列

b.基数较小的表,索引效果比较差,没必要建索引

c.辨识度不高的字段没必要

d.字节长度过大的字段没必要

  1. sql慢查询优化

a.分析sql语句是否加载了额外的数据

b.explain 分析执行计划,修改语句修改索引

d.数据量是否太大,如果太大 横向,纵向分表

  1. mysql如何分库分表,分库分表的方式和分片策略有哪些,分库分表后,sql语句执行流程

什么是分库分表:当表中的数据量过大,整个查询效率就会降低的非常明显。为了提升效率,就要将整个表的数据分散到多个数据库的多个表中

分库分表的策略:

垂直分片:

从业务和数据需求上,将不同的数据表分散到不同的数据库。能解决数据库文件过大的问题,但是从根本上解决不了数据大查询慢的问题。

水平分片:

将表的数据拆分放到不同的数据库和表中,可以解决数据量过大造成的查询效率过低的问题。

水平分片策略:

取余,取模:优点:数据平均,缺点:扩容非常麻烦

按照范围分片:比较好扩容,数据分布不均匀

按照时间分片:比较容易将热点数据区分出来

按枚举分片:例如按地区

多大数据量适合分库分表:数据超过500w或文件大于2G

分库分表常用组件:Mycat\ShardingSphere

分库分表后,SQL执行流程:

sql解析》查询优化》sql路由》sql改写》sql执行》结果归并

  1. 什么是脏读,幻读,不可重复读?要怎么处理

脏读:在事务进行过程中,读取到了其他事务未提交的数据。

不可重复读:在事务执行过程中,多次查询的数据不一致

幻读:在一个事务中,用同样的操作查询数据,得到的记录数不一致。

处理方式有很多种:加锁,事务隔离,mvcc

加锁:

  1. 脏读:在修改时加排它锁,直到事务提交才释放。读取时加共享锁,读完释放锁。

  1. 不可重复读:读书数据时,加共享锁,写数据时加排它锁。

  1. 幻读:加范围锁

  1. 事务的基本特性和隔离级别

基本特性:

  1. 原子性:指一个事务的操作要么全部成功,要么全部失败。

  1. 一致性:数据苦总是从一个一致性的状态转换到另一个一致性的状态。

  1. 隔离性:事务的修改在最终提交前,对其他事务是不可见的

  1. 持久性:一旦事务提交,所有的修改会永久保存到数据库中

隔离性的4个隔离级别:

  1. 读未提交 可能会读到其他事务未提交的数据,也叫脏读

  1. 读已提交 两次读取结果不一致,叫不可重复读

  1. 可重复读 mysql默认级别,就是每次读取结果一样,可能产生幻读

  1. 串行 一般不会使用,他会给每一行读取的数据加锁,会导致大量超时和锁竞争问题。

http://www.lryc.cn/news/6267.html

相关文章:

  • 动静态库概念及创建
  • 【H.264】码流解析 annexb vs avcc
  • 【最优化方法】1-最优化方法介绍
  • 数据结构 | 树 | 二叉树
  • 笔记:使用 unbuild 搭建 JavaScript 构建系统笔记
  • 【SpringBoot3.0源码】启动流程源码解析 •下
  • QT(56)-动态链接库-windows-导出变量-导出类
  • TCP传输文件
  • vue3:加载本地图片等静态资源
  • 工作记录------数据库group_concat函数长度问题
  • Python基础语法
  • windows环境下安装Nginx及常用操作命令
  • python excel数据处理?
  • Hudi-集成Flink
  • 重新认识 React Hooks useContext
  • 数据库(2)--加深对统计查询的理解,熟练使用聚合函数
  • stm32f407探索者开发板(十五)——NVIC中断优先级管理
  • 【Azure 架构师学习笔记】-Azure Logic Apps(6)- Logic Apps调用ADF
  • python随机获取列表中某一元素
  • Nacos微服务笔记
  • MAC文件误删怎么办?mac数据恢复,亲测很好用的方法
  • 机械革命z2黑苹果改造计划第二番-MacOS实用软件渗透工具
  • 【LeetCode】每日一题(4)
  • Linux内核移植:内核的启动过程分析、启动配置与rootfs必要文件
  • 【代码随想录训练营】【Day14】第六章|二叉树|理论基础|递归遍历|迭代遍历|统一迭代
  • AXI-Stream 学习笔记
  • 【Linux】程序进程地址空间
  • 电压放大器在液滴微流控芯片的功能研究中的应用
  • Linux操作系统学习(进程地址空间)
  • 【排序】快速排序实现