Java后端面试题——Mysql篇

这篇具有很好参考价值的文章主要介绍了Java后端面试题——Mysql篇。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在Mysql中,如何定位慢查询呢?

表象:页面加载过慢、接口压测响应时间过长(超过1s)

原因:聚合查询 多表查询 表数据量过大查询 深度分页查询

方案:MySQL自带慢日志

需要在MySQL的配置文件(/etc/my.cnf)中配置如下信息:

# 开启MySQL慢日志查询开关

slow_query_log=1

# 设置慢日志的时间为2秒,SQL语句执行时间超过2秒,就会视为慢查询,记录慢查询日志 long_query_time=2

配置完毕之后,重新启动MySQL服务器进行测试,查看慢日志文件中记录的信息 /var/lib/mysql/localhost-slow.log 

定位好之后,如何分析慢查询呢?

可以采用EXPLAIN 或者 DESC命令获取 MySQL 如何执行 SELECT 语句的信息

Java后端面试题——Mysql篇,java,mysql,开发语言

Java后端面试题——Mysql篇,java,mysql,开发语言 

Java后端面试题——Mysql篇,java,mysql,开发语言 

MYSQL支持的存储引擎有哪些, 有什么区别 ? 

 存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式 。存储引擎是基于表的,而不是基于库的,所以存储引擎也可被称为表类型。

Java后端面试题——Mysql篇,java,mysql,开发语言

InnoDB是一种兼顾高可靠性和高性能的通用存储引擎,在 MySQL 5.5 之后,InnoDB是默认的 MySQL 存储引擎。

索引的底层数据结构了解过嘛 ?  

MySQL的InnoDB引擎采用的B+树的数据结构来存储索引

阶数更多,路径更短

磁盘读写代价B+树更低,非叶子节点只存储指针,叶子阶段存储数据

B+树便于扫库和区间查询,叶子节点是一个双向链表

知道什么叫覆盖索引嘛 ?

覆盖索引是指查询使用了索引,并且需要返回的列,在该索引中已经全部能够找到

使用id查询,直接走聚集索引查询,一次索引扫描,直接返回数据,性能高。

如果返回的列中没有创建索引,有可能会触发回表查询,尽量避免使用select *

MYSQL超大分页怎么处理 ?

覆盖索引+子查询

索引创建原则有哪些?

1). 数据量较大,且查询比较频繁的表

2). 常作为查询条件、排序、分组的字段

3). 字段内容区分度高

4). 内容较长,使用前缀索引

5). 尽量联合索引

6). 要控制索引的数量

7). 如果索引列不能存储NULL值,请在创建表时使用NOT NULL约束它

什么情况下索引会失效 ?

违反最左前缀法则

范围查询右边的列,不能使用索引

不要在索引列上进行运算操作, 索引将失效

字符串不加单引号,造成索引失效。(类型转换)

以%开头的Like模糊查询,索引失效

并发事务带来哪些问题?怎么解决这些问题呢?MySQL的默认隔离级别是?

并发事务的问题:

脏读:一个事务读到另外一个事务还没有提交的数据

 不可重复读:一个事务先后读取同一条记录,但两次读取的数据不同

幻读:一个事务按照条件查询数据时,没有对应的数据行,但是在插入数据时,又发现这行数据已经存在,好像出现了”幻影”。

隔离级别:

READ UNCOMMITTED  未提交读

READ COMMITTED  读已提交

REPEATABLE READ  可重复读

SERIALIZABLE    串行化

解释一下MVCC

MySQL中的多版本并发控制。指维护一个数据的多个版本,使得读写操作没有冲突

隐藏字段:

trx_id(事务id),记录每一次操作的事务id,是自增的

roll_pointer(回滚指针),指向上一个版本的事务版本记录地址

undo log:

回滚日志,存储老版本数据

版本链:多个事务并行操作某一行记录,记录不同事务修改数据的版本,通过roll_pointer指针形成一个链表

readView解决的是一个事务查询选择版本的问题

根据readView的匹配规则和当前的一些事务id判断该访问那个版本的数据

不同的隔离级别快照读是不一样的,最终的访问的结果不一样

    RC :每一次执行快照读时生成ReadView

    RR:仅在事务中第一次执行快照读时生成ReadView,后续复用

分库分表

场景:

项目业务数据逐渐增多,或业务发展比较迅速

优化已解决不了性能问题(主从读写分离、查询索引…)

IO瓶颈(磁盘IO、网络IO)、CPU瓶颈(聚合查询、连接数太多)

垂直分库:

Java后端面试题——Mysql篇,java,mysql,开发语言

垂直分表:

把不常用的字段单独放在一张表

把text,blob等大字段拆分出来放在附表中 

冷热数据分离

减少IO过渡争抢,两表互不影响

水平分库:

解决了单库大数量,高并发的性能瓶颈问题

提高了系统的稳定性和可用性

水平分表:

优化单一表数据量过大而产生的性能问题;

避免IO争抢并减少锁表的几率;文章来源地址https://www.toymoban.com/news/detail-660984.html

到了这里,关于Java后端面试题——Mysql篇的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java开发之Mysql【面试篇 完结版】

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 本文主要记录mysql的查询、索引、sql优化、事务、主从同步、分库分表等问题的分析与面试回答示例。 提示:以下是本篇文章正文内容,下面案例可供参考 ① 问题引入 聚合查询 多表查询 表数据量过大

    2024年02月09日
    浏览(40)
  • Java语言B/S智慧工地云平台源码(微服务+Java+Spring Cloud +UniApp +MySql)

    目录 劳务管理 视频监控 绿色施工 危大工程管理 绿色施工——环境与能耗 高效施工——进度管控 文明施工——劳务管理 智慧工地建设效益     智慧工地云平台源码技术架构:微服务+Java+Spring Cloud +UniApp +MySql       智慧工地管理平台是依托 物联网、互联网、AI、可视化建

    2024年04月16日
    浏览(58)
  • java常见面试题:如何使用Java进行JPA框架开发?

    JPA(Java Persistence API)是一个Java平台的标准持久化API,它提供了一种标准的查询语言和API来将Java对象与关系数据库进行映射。 以下是使用Java进行JPA框架开发的详细步骤: 添加JPA依赖 首先,你需要在项目中添加JPA的依赖。如果你使用的是Maven项目,可以在pom.xml文件中添加以

    2024年01月18日
    浏览(54)
  • Java开发 - 不知道算不算详细的MySQL多维度性能优化剖析

    MySQL性能优化是一个很大的话题,小到一句SQL,大到一个系统,都是我们优化的目标,博主之前曾写过一篇关于SQL优化的博客,感兴趣的小伙伴直接点击即可。本篇,我们将从多个维度来讲解MYSQL性能优化相关的内容,读完此篇,你将初步了解有哪些MySQL的优化策略,以及怎么

    2024年02月06日
    浏览(37)
  • java生态环境评价Myeclipse开发mysql数据库web结构java编程计算机网页项目

    一、源码特点     java 生态环境评价管理系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql5.0,使用java语言开发。 java web 生态环境评价系

    2024年02月19日
    浏览(43)
  • java排课管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

    一、源码特点     java排课管理系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql5.0,使用java语言开发。 java web 排课管理系统1 下载地址

    2024年02月19日
    浏览(54)
  • java流浪动物保护系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

    一、源码特点     java Web 流浪动物保护系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql5.0,使用java语言开发。 二、功能介绍 前台功能:

    2024年02月04日
    浏览(42)
  • 【后端面经-数据库】MySQL的存储引擎简介

    目录 MySQL的存储引擎 0. 存储引擎的查看和修改 1. MyISAM 2. InnoDB 3. MEMORY 4. MERGE 5. 总结 6. 参考博客 mysql主要有四类存储引擎,目前主要使用InnoDB作为存储引擎。 查看当前数据库的默认存储引擎 查看当前数据库所支持的存储引擎 查看支持事务处理的存储引擎 设置新表的存储引擎

    2024年02月08日
    浏览(48)
  • 智慧工地云平台源码,基于微服务+Java+Spring Cloud +UniApp +MySql开发

    智慧工地可视化系统利用物联网、人工智能、云计算、大数据、移动互联网等新一代信息技术,通过工地中台、三维建模服务、视频AI分析服务等技术支撑,实现智慧工地高精度动态仿真,趋势分析、预测、模拟,建设智能化、标准化的智慧工地综合业务系统,解决传统工地

    2024年02月14日
    浏览(71)
  • 基于微服务、Java、Springcloud、Vue、MySQL开发的智慧工地管理系统源码

    智慧工地聚焦施工现场岗位一线,围绕“人、机、料、法、环”五大要素,数字化工地平台与现场多个子系统的互联实现了工地业务间的互联互通和协同共享。数字化工地管理平台能够盘活工地各大项目之间孤立的信息系统,实现数据的统一接入、处理与维护,提高现有系统

    2024年02月11日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包