Java面试准备-Mysql

简介: 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查询 %在前面的是不走索引的,走全表扫描

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
10月前
|
算法 Java
50道java集合面试题
50道 java 集合面试题
|
10月前
|
SQL Java 关系型数据库
Java连接MySQL数据库环境设置指南
请注意,在实际部署时应该避免将敏感信息(如用户名和密码)硬编码在源码文件里面;应该使用配置文件或者环境变量等更为安全可靠地方式管理这些信息。此外,在处理大量数据时考虑使用PreparedStatement而不是Statement可以提高性能并防止SQL注入攻击;同时也要注意正确处理异常情况,并且确保所有打开过得资源都被正确关闭释放掉以防止内存泄漏等问题发生。
460 13
|
12月前
|
Java 数据库连接 数据库
Java 相关知识点总结含基础语法进阶技巧及面试重点知识
本文全面总结了Java核心知识点,涵盖基础语法、面向对象、集合框架、并发编程、网络编程及主流框架如Spring生态、MyBatis等,结合JVM原理与性能优化技巧,并通过一个学生信息管理系统的实战案例,帮助你快速掌握Java开发技能,适合Java学习与面试准备。
522 2
Java 相关知识点总结含基础语法进阶技巧及面试重点知识
|
10月前
|
算法 Java
50道java基础面试题
50道java基础面试题
|
缓存 Java 关系型数据库
Java 面试经验总结与最新 BAT 面试资料整理含核心考点的 Java 面试经验及最新 BAT 面试资料
本文汇总了Java面试经验与BAT等大厂常见面试考点,涵盖心态准备、简历优化、面试技巧及Java基础、多线程、JVM、数据库、框架等核心技术点,并附实际代码示例,助力高效备战Java面试。
530 0
|
缓存 Cloud Native Java
Java 面试微服务架构与云原生技术实操内容及核心考点梳理 Java 面试
本内容涵盖Java面试核心技术实操,包括微服务架构(Spring Cloud Alibaba)、响应式编程(WebFlux)、容器化(Docker+K8s)、函数式编程、多级缓存、分库分表、链路追踪(Skywalking)等大厂高频考点,助你系统提升面试能力。
1594 0
|
人工智能 Java 关系型数据库
Java的时间处理与Mysql的时间查询
本文总结了Java中时间与日历的常用操作,包括时间的转换、格式化、日期加减及比较,并介绍了MySQL中按天、周、月、季度和年进行时间范围查询的方法,适用于日常开发中的时间处理需求。
227 0
|
10月前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
598 158
|
10月前
|
关系型数据库 MySQL 数据库
自建数据库如何迁移至RDS MySQL实例
数据库迁移是一项复杂且耗时的工程,需考虑数据安全、完整性及业务中断影响。使用阿里云数据传输服务DTS,可快速、平滑完成迁移任务,将应用停机时间降至分钟级。您还可通过全量备份自建数据库并恢复至RDS MySQL实例,实现间接迁移上云。

推荐镜像

更多