栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java 攻城狮 MySQL 相关面试题

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java 攻城狮 MySQL 相关面试题

基础概念 Mysql 的技术特点是什么?

Mysql 数据库软件是一个客户端或服务器系统,其中包括:支持各种客户端程序和库的多线程 SQL 服务器、不同的后端、广泛的应用程序编程接口和管理工具。

Mysql 服务器默认端口是什么?

Mysql 服务器的默认端口是 3306

与 Oracle 相比,Mysql 有什么优势?
  • Mysql 是开源软件,随时可用,无需付费。
  • Mysql 是便携式的。
  • 带有命令提示符的 GUI。
  • 使用 Mysql 查询浏览器支持管理。
MySQL由哪些部分组成,分别用来做什么?
  1. Server
  • 连接器: 管理连接, 权限验证。
  • 分析器: 词法分析, 语法分析。
  • 优化器: 执行计划生成, 索引的选择。
  • 执行器: 操作存储引擎, 返回执行结果。
  1. 存储引擎: 存储数据, 提供读写接口。
MySql的存储引擎有哪些?

MyISAM、InnoDB、BDB、MEMORY、 MERGE、 EXAMPLE、NDB Cluster、ARCHIVE、CSV.BLACKHOLE、FEDERATED。

Tips:InnoDB和BDB提供事务安全表,其他存储引擎都是非事务安全表。

常用的2种存储引擎?

1、Myisam是Mysql的默认存储引擎,当create创建新表时,未指定新表的存储引擎时,默认使用Myisam。

每个MyISAM在磁盘上存储成三个文件。文件名都和表名相同,扩展名分别是.frm (存储表定义)、MYD (MYData,存储数据)、.MYI (MYIndex,存储索引)。

数据文件和索引文件可以放置在不同的目录,平均分布io,获得更快的速度。

2、InnoDB 存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全。但是对比Myisam的存储引擎, InnoDB写的处理效率差一些并且会占用更多的磁盘空间以保留数据和索引。

Mysql 中有哪几种锁?

MyISAM 支持表锁,InnoDB 支持表锁和行锁,默认为行锁。

  • 表级锁:开销小,加锁快,不会出现死锁。锁定粒度大,发生锁冲突的概率最高,并发量最低。

  • 行级锁:开销大,加锁慢,会出现死锁。锁力度小,发生锁冲突的概率小,并发度最高。

InnoDB 是什么?

lnnoDB 是一个由 Oracle 公司开发的 Innobase Oy 事务安全存储引擎。

MyISAM和InnoDB的区别有哪些
  • InnoDB支持事务,MyISAM不支持。
  • InnoDB支持行级锁, MyISAM支持表级锁。
  • InnoDB支持多版本并发控制(MVVC),MyISAM不支持。
  • InnoDB支持外键,MyISAM不支持。
  • MyISAM支持全文索引, InnoDB部分版本不支持(但可以使用Sphinx插件)。
简要说一下数据库范式。
  • 第一范式: 属性不可再分。

  • 第二范式: 在一范式的基础上, 要求数据库表中的每个实例或行必须可以被唯一地区分。通常需要为表加上一个列,以存储各个实例的唯一标识,这个惟一属性列被称为主关键字或主键。

  • 第三范式: 在二范式的基础上, 要求一个数据库表中不包含已在其它表中已包含的非主关键字信息
    所以第三范式具有如下特征:
    (1)每一列只有一个值。
    (2)每一行都能区分。
    (3)每一个表都不包含其他表已经包含的非主关键字信息。

基础操作 Heap 表是什么?

HEAP 表存在于内存中,用于临时高速存储。

  • BLOB 或 TEXT 字段是不允许的
  • 只能使用比较运算符=,<,>,=>,= <
  • HEAP 表不支持 AUTO_INCREMENT
  • 索引不可为 NULL
NOW()和 CURRENT_DATE()有什么区别?

OW()和 CURRENT_DATE()有什么区别?
NOW()命令用于显示当前年份、月份、日期、小时、分钟和秒。
CURRENT_DATE()仅显示当前年份,月份和日期

索引 可以使用多少列创建索引?

任何标准表最多可以创建 16 个索引列

唯一索引比普通索引快吗,为什么?

唯一索引不一定比普通索引快, 还可能慢。

  1. 查询时, 在未使用 limit 1 的情况下,在匹配到一条数据后, 唯一索引即返回,普通索引会继续匹配下一条数据,发现不匹配后返回。如此看来唯一索引少了一次匹配, 但实际上这个消耗微乎其微。

  2. 更新时, 这个情况就比较复杂了。 普通索引将记录放到 change buffer 中语句就执行完毕了。而对唯一索引而言, 它必须要校验唯一性, 因此, 必须将数据页读入内存确定没有冲突, 然后才能继续操作。 对于写多读少的情况,普通索引利用 change buffer 有效减少了对磁盘的访问次数, 因此普通索引性能要高于唯一索引。

事务 MySQL事务的隔离级别, 分别有什么特点?
  1. 读未提交(RU read uncommited): 一个事务还没提交时, 它做的变更就能被别的事务看到。

  2. 读提交(RC): 脏独,一个事务提交之后, 它做的变更才会被其他事务看到。

  3. 可重复读(RR repeatable read): 一个事务执行过程中看到的数据,总是跟这个事务在启动时看到的数据是一致的。当然在可重复读隔离级别下, 未提交变更对其他事务也是不可见的。

  4. 串行化(S serializable): 对于同一行记录, 读写都会加锁. 当出现读写锁冲突的时候, 后访问的事务必须等前一个事务执行完成才能继续执行。

什么是锁?

数据库的锁是为了支持对共享资源进行并发访问,提供数据的完整性和一致性,这样才能保证在高并发的情况下,访问数据库的时候,数据不会出现问题。

死锁?

是指两个或两个以上进程执行过程中,因竞争共享资源造成的相互等待现象。

如何处理死锁?
  • 设置超时时间。超时后自动释放。·
  • 发起死锁检测,主动回滚其中一条事务,让其他事务继续执行。
MySQL常见问题解决与优化 MySQL查询缓存有什么弊端,应该什么情况下使用, 8.0版本对查询缓存有什么变更?
  • 查询缓存可能会失效非常频繁, 对于一个表, 只要有更新, 该表的全部查询缓存都会被清空。 因此对于频繁更新的表来说, 查询缓存不一定能起到正面效果。

  • 对于读远多于写的表可以考虑使用查询缓存。

  • 8.0版本的查询缓存功能被删了

Mysql 如何优化 DISTINCT(去重)?

DISTINCT 在所有列上转换为 GROUP BY,并与 ORDER BY 子句结合使用。

SELECt DISTINCT t1.a FROM t1,t2 where t1.a=t2.a;
做过哪些MySQL索引相关优化?
  • 尽量使用主键查询: 聚簇索引上存储了全部数据, 相比普通索引查询, 减少了回表的消耗。

  • MySQL5.6之后引入了索引下推优化, 通过适当的使用联合索引, 减少回表判断的消耗。

  • 若频繁查询某一列数据, 可以考虑利用覆盖索引避免回表。

  • 联合索引将高频字段放在最左边(最左特性)。

一千万条数据的表, 如何分页查询?

数据量过大的情况下,limit offset 分页会由于扫描数据太多而越往后查询越慢。 可以配合当前页最后一条ID进行查询,

SELECt * FROM T WHERe id > #{ID} LIMIT #{LIMIT} .

当然, 这种情况下ID必须是有序的, 这也是有序ID的好处之一。

订单表数据量越来越大导致查询缓慢, 如何处理?

分库分表。由于历史订单使用率并不高,高频的可能只是近期订单。

因此, 将订单表按照时间进行拆分,,根据数据量的大小考虑按月分表或按年分表。 订单ID最好包含时间(如根据雪花算法生成), 此时既能根据订单ID直接获取到订单记录, 也能按照时间进行查询。

MySQL怎么恢复半个月前的数据

通过整库备份+binlog进行恢复,前提是要有定期整库备份且保存了binlog日志。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/353984.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号