java面经 MySQL

news2024/11/27 21:07:11

存储引擎--MyISAM和InnoDB的区别

使用场景

对比

MySQL隔离级别--未提交读,提交读,可重复读,序列化

 隔离级别含义

隔离级别

英文名称

含义

脏读

复读

幻读

未提交读

READ UNCOMMITTED

可读取其它事务未提交的结果

提交读

READ COMMITTED

一个事务开始时,只能读到其他事务已经提交的修改。

例:如果A事务已经修改了XX,但还没提交,则B事务读XX时还是未修改的值。

Oracle等多数数据库默认是该级别)。

×

可重复读

REPEATABLE READ

在开启事务时,同一条件的查询返回的结果是一样的。

例:A事务开启,查询一条记录;B事务更新这条记录并提交,A事务再次查询这条记录(查到的结果跟第一次查到的一样,而不是B修改过的结果)。

MySQL默认级别

×

×

可序列化

SERIALIZABLE

 

当一个事务执行时,会对所涉及的数据行进行加锁,其他事务无法对这些数据行进行修改或读取,直到当前事务提交或回滚。

×

×

×

脏读、不可重复读、幻读的含义

      

索引的分类

索引的优点/缺点

优点

索引优点就是提高了查询性能,主要是以下几个方面

  1. 索引大大减少了服务器需要扫描的数据量。
  2. 索引可以帮助服务器避免排序和临时表。
  3. 索引可以将随机I/O 变为顺序I/O

缺点

  1. 降低了数据写入的效率。原因:当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护
  2. 索引增加了查询优化器的选择时间。查询优化器在对一条sql语句进行分析时,会结合一系列的分析计算出一条最优的查询sql。添加了索引之后,相当于是在原来的基础上,添加了对索引因素的分析,若在很多字段上创建了索引,会增加这个选择的时间。
  3. 索引占物理空间。除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。

创建索引的原则

索引原则

说明/示例

对查询频率高的字段创建索引

        查询频率高的字段有:作为查询条件的字段(where子句中的列)、连接子句中指定的列

为经常需要排序、分组和联合操作的字段建立索引

经常需要ORDER BY、GROUP BY、DISTINCT和UNION等操作的字段,排序操作会浪费很多时间。

        如果为其建立索引,可以有效地避免排序操作。

尽量使用唯一索引

          唯一性索引的值是唯一的,可以更快速的通过该索引来确定某条记录。  唯一性索引的值是唯一的,可以更快速的通过该索引来确定某条记录。

使用短索引

          如果索引的值很长,那么查询的速度会受到影响。例如,对一个CHAR(100)类型的字段进行全文检索需要的时间肯定要比对CHAR(10)类型的字段需要的时间要多。

使用前缀来索引

        如果索引字段的值很长,最好使用值的前缀来索引。例如,TEXT和BLOG类型的字段,进行全文检索会很浪费时间。如果只检索字段的前面的若干个字符,这样可以提高检索速度。

索引的数目不要太多

过多的索引会导致insert、update、delete语句的执行效率降低;

每创建一个索引都会占用相应的物理空间;

对查询频率高的字段创建索引

        查询频率高的字段有:作为查询条件的字段(where子句中的列)、连接子句中指定的列

对查询频率高的字段创建索引

        查询频率高的字段有:作为查询条件的字段(where子句中的列)、连接子句中指定的列

索引失效的原因/解决方案

联合索引--使用/原理/优化

使用联合索引可以做到覆盖索引,从而避免会表查询。举个例子,从user表中查询用户id,姓名和性别,查询条件为姓名,这时候就可以对用户姓名和性别创建联合索引,这样可以做到覆盖查询和避免会表查询。

另一个场景是,如果存在多个查询条件,针对于查询字段建立联合索引,可以提高多个查询条件组合的查询性能。

索引的优化--LIKE模糊查询

聚集索引/辅助索引/回表查询/覆盖索引

回表查询,先查询辅组索引,再查询聚集索引。

覆盖索引,只用查询辅组索引或者聚集索引。

尽量将回表查询转换为覆盖查询,转换的方法为对要查询的字段建立联合索引,从而避免回表查询。

分库分表--垂直分表与水平分表

垂直(纵向)切分

垂直分库就是根据业务耦合性,将关联度低的不同表存储在不同的数据库,如下图。

 

垂直分表是基于数据库中的"列"进行,某个表字段较多,可以新建一张扩展表,将不经常用或字段长度较大的字段拆分出去到扩展表中。

在字段很多的情况下(例如一个大表有100多个字段),通过"大表拆小表",更便于开发与维护,也能避免跨页问题,MySQL底层是通过数据页存储的,一条记录占用空间过大会导致跨页,造成额外的性能开销。

另外数据库以行为单位将数据加载到内存中,这样表中字段长度较短且访问频率较高,内存能加载更多的数据,命中率更高,减少了磁盘IO,从而提升了数据库性能。如下图。

 

优缺点
优点:

解决业务系统层面的耦合,业务清晰
与微服务的治理类似,也能对不同业务的数据进行分级管理、维护、监控、扩展等
高并发场景下,垂直切分一定程度的提升IO、数据库连接数、单机硬件资源的瓶颈

缺点:

部分表无法join,只能通过接口聚合方式解决,提升了开发的复杂度
分布式事务处理复杂
依然存在单表数据量过大的问题(需要水平切分)

水平(横向)切分

  • 切分时机:当一个应用难以再细粒度的垂直切分,或切分后数据量行数巨大,存在单库读写、存储性能瓶颈,这时候就需要进行水平切分了。
  • 分类:水平切分分为库内分表分库分表,是根据表内数据内在的逻辑关系,将同一个表按不同的条件分散到多个数据库或多个表中,每个表中只包含一部分数据,从而使得单个表的数据量变小,达到分布式的效果。库内分表只解决了单一表数据量过大的问题,但没有将表分布到不同机器的库上,因此对于减轻MySQL数据库的压力来说,帮助不是很大,大家还是竞争同一个物理机的CPU、内存、网络IO,最好通过分库分表来解决。

优缺点

水平分库优点

  • 不存在单库数据量过大、高并发的性能瓶颈,提升系统稳定性和负载能力
  • 应用端改造较小,不需要拆分业务模块

水平分库缺点

  • 跨分片的事务一致性难以保证

  • 跨库的join关联查询性能较差

  • 数据多次扩展难度和维护量极大

 分片规则

  1. 取余/取模
    1. 均匀存放数据
    2. 缺点: 不能扩容
  2. 按照数量范围
    1. 1-500万      501万-1000万
  3. 按照日期范围
    1. 日志 ,订单信息,统计
  4. 按照月份
  5. 按照枚举值
    1. 常量
  6. 二进制取模范围
    1. 类似HashMap
    2. 缺点:数据存放不均匀
  7. 一致性hash分片           

典型的数据分片规则

1、根据数值范围

按照时间区间或ID区间来切分。例如:将userId为1~9999的记录分到第一个库,10000~20000的分到第二个库,以此类推。

优点

  1. 单表大小可控
  2. 天然便于水平扩展,后期如果想对整个分片集群扩容时,只需要添加节点即可,无需对其他分片的数据进行迁移
  3. 使用分片字段进行范围查找时,连续分片可快速定位分片进行快速查询,有效避免跨分片查询的问题。

缺点

热点数据成为性能瓶颈。连续分片可能存在数据热点,例如按时间字段分片,有些分片存储最近时间段内的数据,可能会被频繁的读写,而有些分片存储的历史数据,则很少被查询

2、根据数值取模

一般采用hash取模mod的切分方式,例如:将 Customer 表根据 id字段的hash值取模的余数切分到各个库中。这样同一个用户的数据会分散到同一个库中,如果查询条件带有id字段,则可明确定位到相应库去查询。

优点:数据分片相对比较均匀,不容易出现热点和并发访问的瓶颈。

缺点:

1、后期分片集群扩容时,需要迁移旧的数据。
2、容易面临跨分片查询的复杂问题。比如上例中,如果频繁用到的查询条件中不带id时,将会导致无法定位数据库,从而需要同时向4个库发起查询,分库反而成为拖累。

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/646904.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

管理类联考——逻辑——真题篇——阅读新题型真题

阅读新题型真题 Part B-2010- Part B Directions: Read the following text and decide whether each of the statements is true or false. Choose T if the statement is true or F if the statement is not true. Mark your answers on ANSWER SHEET. (10 points) Copying…

Android——基本控件之下拉列表:Spinner(九)

1.知识点 &#xff08;1&#xff09;掌握下拉列表Spinner的使用&#xff1b; &#xff08;2&#xff09;可以通过程序配置Spinner显示内容&#xff1b; &#xff08;3&#xff09;可以通过配置文件配置Spinner显示内容。 2.具体内容 在html中&#xff0c;下拉列表使用<…

直击网络安全简史,现阶段提升免疫力是关键 | 产业安全观智库访谈

当下&#xff0c;AIGC、区块链、云计算等新兴技术发展如火如荼&#xff0c;网络安全的内涵与外延也随之出现许多变化&#xff0c;安全攻防也从早期的黑客炫技手段&#xff0c;演变为如今产业发展的底座。过去的20多年&#xff0c;网络安全行业出现了哪些新变化&#xff1f;安全…

springboot项目外卖管理 day06-用户端进行展示与下单操作

文章目录 一、用户地址簿1.1、需求分析1.2、功能展示 二、菜品展示2.1、需求分析 2.2、代码开发2.2.1、代码开发-梳理交互过程 2.3、功能测试 3、购物车功能3.1、需求分析3.2、数据模型3.3、代码开发3.3.1、代码开发-梳理交互过程3.3.2、代码开发-准备工作 4、下单4.1、需求分析…

C++算法:加权连通图的最小生成树(Kruskal)

文章目录 前言一、什么是最小生成树二、代码实现1、构建图2、生成树 总结原创文章&#xff0c;未经许可&#xff0c;严禁转载 前言 最小生成树算法就是在众多可行的方案中选择代价最小的方法。生活中我们经常会遇到类似可以抽象成最小生成树的例子&#xff1a;比如你要给家中布…

MYSQL数据库管理1

目录 数据库的基本概念 数据&#xff08;Data&#xff09; 表 数据库 数据库管理系统&#xff08;DBMS&#xff09; 数据库系统 数据库系统发展史 第一代数据库 第二代数据库 第三代数据库 当今主流数据库介绍 SQL Server&#xff08;微软公司产品&#xff09; Or…

3年经验来面试20K的测试岗,连基本功都不会,还不如去招应届生

这段时间公司项目急缺人手&#xff0c;面了不少人&#xff0c;竟然没有一个满意的。一开始瞄准的就是中高级的水准&#xff0c;也没指望来技术大牛&#xff0c;提供的薪资在15-25K&#xff0c;面试的人很多&#xff0c;但结果让人失望。 从简历上来说都是3-4年工作经验&#x…

python---列表和元组(2)

切片操作的基本使用 使用切片的时候省略边界 切片操作是一个比较高校的操作,进行切片的时候,只是取出了原有列表的一个部分,并不涉及到数据的拷贝,假设有一个很大的列表,进行切片,切片的范围也很大,即使如此,切片操作仍然非常高校. 切片操作还可以指定"步长",类比…

Leangoo领歌敏捷项目管理场景示例

Leangoo领歌​​​​​​​是一款专业的敏捷开发管理工具&#xff0c;提供端到端敏捷研发管理解决方案&#xff0c;涵盖敏捷需求管理、任务协同、进展跟踪、统计度量等。 Leangoo领歌上手快、实施成本低&#xff0c;可帮助企业快速落地敏捷&#xff0c;提质增效、缩短周期、加速…

通过零代码ETLCloud实现金蝶云星空数据自动化同步

金蝶云星空系统介绍 金蝶云星空是一款基于云计算架构打造的全面财务管理软件&#xff0c;旨在为企业提供全方位、一站式的财务解决方案。其功能包括财务核算、现金管理、应付应收管理、成本核算、固定资产管理、税务管理等&#xff0c;覆盖了财务管理的各个方面&#xff0c;可…

【黄啊码】批量获取邮箱软件的下载和使用(外贸人必用的工具箱)

大家好&#xff0c;我是黄啊码&#xff0c;前两天有个朋友想通过邮箱实现获取邮箱地址&#xff0c;问我有没有类似的软件和教程&#xff0c;今天&#xff0c;他来了。。 该外贸软件可以按关键字收集电子邮件 使用内置的网站爬虫从网站中提取电子邮件和电话 与许多基于网络的工…

【DRAM存储器一】基本存储单元、阵列结构、读写原理

&#x1f449;个人主页&#xff1a;highman110 &#x1f449;作者简介&#xff1a;一名硬件工程师&#xff0c;持续学习&#xff0c;不断记录&#xff0c;保持思考&#xff0c;输出干货内容 参考书籍&#xff1a;《Memory Systems - Cache, DRAM, Disk》 目录 最小存储单…

深度学习笔记之Transformer(二)关于注意力分数的总结

深度学习笔记之Transformer——关于注意力分数的总结 引言回顾&#xff1a; Nadaraya-Watson \text{Nadaraya-Watson} Nadaraya-Watson核回归再回首&#xff1a; Seq2seq \text{Seq2seq} Seq2seq中的注意力机制注意力机制的泛化表示加性注意力机制缩放点积注意力机制 引言 上一…

Pytest教程__配置文件-pytest.ini(4)

pytest配置文件可以改变pytest的默认运行方式&#xff0c;它是一个固定的文件名称pytest.ini。 存放路径为项目的根目录 解决中文报错 在讲解配置文件的可用参数前&#xff0c;我们先解决一个高概率会遇到的问题&#xff0c; 那就是在pytest.ini文件 中不能使用任何中文符号&…

【Webpack】Webpack

❤️ Author&#xff1a; 老九 ☕️ 个人博客&#xff1a;老九的CSDN博客 &#x1f64f; 个人名言&#xff1a;不可控之事 乐观面对 &#x1f60d; 系列专栏&#xff1a; 文章目录 WebpackWebpack是干嘛的代码分割摇树优化模块热替换 Webpack Webpack是干嘛的 Webpack是用来打…

<Python全景系列-2> Python数据类型大盘点

欢迎来到我们的系列博客《Python全景系列》&#xff01;在这个系列中&#xff0c;我们将带领你从Python的基础知识开始&#xff0c;一步步深入到高级话题&#xff0c;帮助你掌握这门强大而灵活的编程语法。无论你是编程新手&#xff0c;还是有一定基础的开发者&#xff0c;这个…

一种自适应异常数据点消除方法

1.问题 在现实生活中&#xff0c;采集到的信号&#xff0c;会有一些噪点需要去除&#xff0c;否则这部分数据在比如时域空间直接进行分析时就会遇到非常难以厘清的逻辑要处理&#xff0c;各种异常。 肉眼看去&#xff0c;那些噪点是清清楚楚的。如何去除呢&#xff1f; 这里给…

快速搭建自己的跑腿服务平台:开源跑腿系统源码分享

在现代社会&#xff0c;人们生活节奏加快&#xff0c;很多时候需要在短时间内完成各种任务&#xff0c;如购物、送货等。这就催生了跑腿服务的兴起。跑腿服务平台为用户提供一站式服务&#xff0c;让用户可以轻松地找到可靠的跑腿服务&#xff0c;并实现便捷快速的服务体验。 …

基于Java线上旅行信息管理系统设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a; ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ &#x1f345; 文末获取源码联系 &#x1f345; &#x1f447;&#x1f3fb; 精…

12. 100ASK-V853-PRO开发板 MIPI屏测试指南

100ASK-V853-PRO开发板 MIPI屏测试指南 硬件要求&#xff1a; 100ASK-V853-PRO开发板四寸MIPI屏 软件要求&#xff1a; 固件下载地址&#xff1a;链接&#xff1a;百度网盘 提取码&#xff1a;sp6a 固件位于资料光盘中的10_测试镜像/2.测试4寸MIPI屏/v853_linux_100ask_uar…