首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Java高频面试题- 每日三连问?【Day16】 — MySQL篇(二)

Java高频面试题- 每日三连问?【Day16】 — MySQL篇(二)

作者头像
浩说编程
发布于 2022-04-12 14:07:12
发布于 2022-04-12 14:07:12
3990
举报
文章被收录于专栏:Java经验之谈Java经验之谈

问题导读

一、说说MySQL 存储引擎MyISAM 与InnoDB 的区别?

二、MyISAM 索引与InnoDB 索引的区别?

三、MySQL 中有哪几种锁?

01

说说MySQL 存储引擎MyISAM 与InnoDB 的区别?

正经回答:

锁粒度方面:

由于锁粒度不同,InnoDB 比MyISAM 支持更高的并发;InnoDB 的锁粒度为行锁、MyISAM 的锁粒度为表锁。

行锁需要对每一行进行加锁,所以锁的开销更大,但是能解决脏读和不可重复读的问题,相对来说也更容易发生死锁

可恢复性上:

由于InnoDB 是有事务日志的,所以在产生由于数据库崩溃等条件后,可以根据日志文件进行恢复。而MyISAM 则没有事务日志。

查询性能上:

MylSAM 要优于InnoDB,因为InnoDB 在查询过程中,是需要维护数据缓存,而且查询过程是先定位到行所在的数据块,然后在从数据块中定位到要查找的行;

而MyISAM 可以直接定位到数据所在的内存地址,可以直接找到数据。

表结构文件上:

MyISAM 的表结构文件包括:frm(表结构定义),.MYI(索引),.MYD(数据);而InnoDB 的表数据文件为:ibd 和frm(表结构定义)。

分享朋友圈,每天进步一点点~

02

MyISAM 索引与InnoDB 索引的区别?

正经回答:

  • InnoDB 索引是聚簇索引,MyISAM 索引是非聚簇索引。
  • InnoDB 的主键索引的叶子节点存储着行数据,因此主键索引非常高效。
  • MyISAM 索引的叶子节点存储的是行数据地址,需要再寻址一次才能得到数据。
  • InnoDB 非主键索引的叶子节点存储的是主键和其他带索引的列数据,因此查询时做到覆盖索引会非常高效。

03

MySQL 中有哪几种锁?

正经回答:

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

行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。

页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般。

- End -

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-02-27,如有侵权请联系 cloudcommunity@tencent.com 删除
目录
  • 正经回答:
  • 正经回答:
  • 正经回答:
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档