Java面试准备-Mysql

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: Java面试准备-Mysql

Mysql常用的数据引擎有哪些


InnoDB:行及锁、主要有事务的支持,支持自增长列,支持外健约束,并发能力强。

MyISAM:全表锁、不支持事务、不支持外健,并发性能差,占用空间相对较少。

Memory:全表锁、速度快、存储内存中,重启数据会丢失。

Merge:MyISAM表的组合。

区别:

InnoDB不保存具体的行数,每次需要进行求和,也就是全表扫描、而MyISAM用一变量保存了整个表的行数,执行变量即可读出函数,速度很快。

InnoDB不支持全文索引、而MyISAM支持全文索引,查询效率更高。


数据库事务的特性


ACID:原子性、一致性、隔离性、持久性

原子性(Atomic):要么全部成功、要么全部失败。

一致性(Consistency):事务操作成功后,数据库状态和业务规则保持一致。

隔离性(Isolation):在并发操作时,不同的事务拥有各自的空间,彼此不互相干扰

持久性(Durabiliy):事务超过成功后,所有数据都需持久化到数据库中。


什么是索引


是Mysql高效获取数据的数据算法,通俗的讲:数据库的索引就好比一本书的目录,能够加快数据库表的查询速度。

索引往往是存在于磁盘中的,没有特别说明,默认是B+树结构。


SQL优化手段有哪些


查询不要用 select *

尽量减少子查询,采用联合关联查询

尽量减少not in 等查询效率比较低的查询条件,特别是整表扫描。

尽量避免where条件后面 使用 != <> 操作符,这样会导致全表扫描


简单说下 drop、delete、truncate的区别


drop 删除表、delete、truncate 删除表的数据。


什么是内连接、左连接、右连接


内连接(Inner Join):匹配两张表中相关联的记录

左连接(Left Join):除了匹配两张表相关联的记录外,还会匹配左表中剩余的记录,右表中位匹配到的字段用null表示

右连接(Right Join):除了匹配两张表相关联的记录外,还会匹配右表中剩余的记录


事务隔离级别


InnoDB采用的是可重复读,MVCC 不能解决幻读的问题,使用的是 Next-Key Lock 锁算法,可以规避幻读。


大数据量表该如何优化


限定数据查询范围:比如查询订单的时候,默认查询当天的

读写分离:主负责写、从负责读,根据场景,可以1住多从

垂直分区:根据数据表进行相关拆分,把一张表拆成多张表

水平拆分:保持数据结构不变,通过分片的方式存储到分布式数据库中。

数据库分片两种方式:客户端代理:封装在Jar包中、Sharding-JDBC

中间件代理:在应用和数据库中间加一个代理层,Mycat。


说说Mysql一条查询语句是如何执行的


获取连接:使用mysql连接器

查询缓存:mysql8.0已删除,不建议使用

分析器:分析词法和语法,一般语法错误就在这个地方

优化器:表里有多个索引的时候,决定采用什么索引,或者关联顺序

执行器:执行器判断执行条件,然后进行执行


什么时候不要使用索引


经常增删改的不要简历索引

有大量重复的列不要建立索引

表记录太少不要简历索引


什么是MVCC


多版本并发控制:是一种用来解决读写冲突无锁控制,为每一个修改保存一个版本,在读操作时不用阻塞写操作,在写操作时不用阻塞读操作,避免了脏读和不可重复读。


Mysql中的锁


共享锁:不阻塞,多个用户可以同一时刻读取相同的资源,相互之间没有影响。

排他锁:一个写操作阻塞其他读锁和写锁,这样只允许一个用户进行写入,防止其他用户读取正在写的内容。

表锁:MyISAM就是默认表锁

行锁:容易出现死锁,并发高,InnoDB支持行锁,但必须有索引,不然就是表锁。


什么时候锁会升级


Mysql行锁只能存在于索引上,因为InnoDB把主键和相关的行数据放在B+树的叶节点上面,如果索引不存在,自动升级为表锁

当非唯一索引操作一定数量时,也就是数据的一半时,这个时候索引的消耗会比表锁消耗更多,这个时候行锁自动升级为表锁


怎么避免数据库死锁:


设置锁等待操作时间,及时失败获取,也能退出程序,不至于一直等待导致死锁

保持事务简短,不要过长,减少开销

事务隔离级别顺序执行


使用Mysql索引的时候应该注意什么


查询的时候尽量少用 !=,比较、函数 等,导致索引失效全表扫描

复合索引遵循偏左原则

如果mysql索引扫描比较慢,会升级为全表扫描

列类型是字符串时,必须加引号,不然搜索也会失效

表字段可以为null的,索引是不生效的

like查询 %在前面的是不走索引的,走全表扫描

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
14天前
|
缓存 Java 关系型数据库
【Java面试题汇总】ElasticSearch篇(2023版)
倒排索引、MySQL和ES一致性、ES近实时、ES集群的节点、分片、搭建、脑裂、调优。
【Java面试题汇总】ElasticSearch篇(2023版)
|
14天前
|
设计模式 Java 关系型数据库
【Java笔记+踩坑汇总】Java基础+JavaWeb+SSM+SpringBoot+SpringCloud+瑞吉外卖/谷粒商城/学成在线+设计模式+面试题汇总+性能调优/架构设计+源码解析
本文是“Java学习路线”专栏的导航文章,目标是为Java初学者和初中高级工程师提供一套完整的Java学习路线。
157 37
|
14天前
|
设计模式 安全 算法
【Java面试题汇总】设计模式篇(2023版)
谈谈你对设计模式的理解、七大原则、单例模式、工厂模式、代理模式、模板模式、观察者模式、JDK中用到的设计模式、Spring中用到的设计模式
【Java面试题汇总】设计模式篇(2023版)
|
14天前
|
存储 关系型数据库 MySQL
【Java面试题汇总】MySQL数据库篇(2023版)
聚簇索引和非聚簇索引、索引的底层数据结构、B树和B+树、MySQL为什么不用红黑树而用B+树、数据库引擎有哪些、InnoDB的MVCC、乐观锁和悲观锁、ACID、事务隔离级别、MySQL主从同步、MySQL调优
【Java面试题汇总】MySQL数据库篇(2023版)
|
14天前
|
存储 缓存 NoSQL
【Java面试题汇总】Redis篇(2023版)
Redis的数据类型、zset底层实现、持久化策略、分布式锁、缓存穿透、击穿、雪崩的区别、双写一致性、主从同步机制、单线程架构、高可用、缓存淘汰策略、Redis事务是否满足ACID、如何排查Redis中的慢查询
【Java面试题汇总】Redis篇(2023版)
|
14天前
|
缓存 前端开发 Java
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
Soring Boot的起步依赖、启动流程、自动装配、常用的注解、Spring MVC的执行流程、对MVC的理解、RestFull风格、为什么service层要写接口、MyBatis的缓存机制、$和#有什么区别、resultType和resultMap区别、cookie和session的区别是什么?session的工作原理
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
|
3天前
|
消息中间件 NoSQL Java
Java知识要点及面试题
该文档涵盖Java后端开发的关键知识点,包括Java基础、JVM、多线程、MySQL、Redis、Spring框架、Spring Cloud、Kafka及分布式系统设计。针对每个主题,文档列举了重要概念及面试常问问题,帮助读者全面掌握相关技术并准备面试。例如,Java基础部分涉及面向对象编程、数据类型、异常处理等;JVM部分则讲解内存结构、类加载机制及垃圾回收算法。此外,还介绍了多线程的生命周期、同步机制及线程池使用,数据库设计与优化,以及分布式系统中的微服务、RPC调用和负载均衡等。
|
11天前
|
NoSQL 关系型数据库 MySQL
微服务架构下的数据库选择:MySQL、PostgreSQL 还是 NoSQL?
在微服务架构中,数据库的选择至关重要。不同类型的数据库适用于不同的需求和场景。在本文章中,我们将深入探讨传统的关系型数据库(如 MySQL 和 PostgreSQL)与现代 NoSQL 数据库的优劣势,并分析在微服务架构下的最佳实践。
|
13天前
|
存储 SQL 关系型数据库
使用MySQL Workbench进行数据库备份
【9月更文挑战第13天】以下是使用MySQL Workbench进行数据库备份的步骤:启动软件后,通过“Database”菜单中的“管理连接”选项配置并选择要备份的数据库。随后,选择“数据导出”,确认导出的数据库及格式(推荐SQL格式),设置存储路径,点击“开始导出”。完成后,可在指定路径找到备份文件,建议定期备份并存储于安全位置。
138 11
|
1月前
|
弹性计算 关系型数据库 数据库
手把手带你从自建 MySQL 迁移到云数据库,一步就能脱胎换骨
阿里云瑶池数据库来开课啦!自建数据库迁移至云数据库 RDS原来只要一步操作就能搞定!点击阅读原文完成实验就可获得一本日历哦~