MySQL面试题

1.select语句编写顺序、执行顺序

编写顺序:select from where groupby having orderby limit

执行顺序:from where groupby having select orderby limit

2.char 和 varchar 的区别

(1)char定长,varchar长度可变,varchar的空间利用率高

(2)char的存取速度更快

3.事务的基本要素

ACID:原子性、一致性、隔离性、持久性

4.事务并发问题

脏读:事务A读到了事务B未提交的事务

不可重复读:事务A读到了事务B的更新操作

幻读:事务A读到了事务B的插入操作

5.事务的隔离级别

读未提交 < 读已提交 < 可重复读 < 串行化

6.MyISAM 和 InnoDB 的区别

InnoDB支持事务,MyISAM不支持

InnoDB支持行级锁,MyISAM支持表锁,不支持行级锁

InnoDB支持外键,MyISAM不支持

InnoDB存储为单个文件,MyISAM分为三个文件存储

7.悲观锁和乐观锁的实现

悲观锁:select ... for update   通过where条件锁定

乐观锁:利用版本号version机制实现乐观锁

8.索引的优点缺点

优点:提高检索速度,降低排序成本,有利于调优

缺点:占用空间,降低更新速度

9.聚簇索引与非聚簇索引

聚簇索引:叶子节点存放行数据

非聚簇索引:叶子节点不存储数据,只存储地址。

10.索引失效场景

1.违反最左前缀法则,跳过了索引的某列

2.在索引列上进行了运算

3.字符串不加引号(隐式类型转换)

4.模糊查询的头部匹配

5.or分别开的条件,前面列有索引,后面没有,都会失效

6.范围查询右侧的索引失效(> 失效, 但是 >= 不会失效)

7.类型不匹配查询

8.在索引列上使用了函数

11.B-Tree 和 B+Tree 的区别

B-:每个节点都存储key和value,叶子节点指针为null

B+:只有叶子节点存储data,叶子节点有指向相邻叶子节点的指针

12.MySQL分析网站卡顿、瘫痪问题

1.架构层面:是否使用主从

2.表结构层面:是否满足常规的表设计规范

3.sql语句方面:开启慢查询日志,获取sql语句进行分析

13.排查sql语句

(1)开启慢查询

(2)查看慢查询日志

(3)使用explain查看执行计划

14.explain执行计划

id:select查询的执行序列号,按照表顺序(id相同,从上向下,大值优先)

select_type:查询的类型

table:表

type:表连接类型

possible_keys:可能用到的索引

key:实际使用的索引

key_len:索引的最大可能长度

rows:mysql认为必须要执行的查询的行数

filtered:返回结果的行数占需要读取行数的百分比

15.数据库三大范式

第一范式:保证字段不可再分,保证原子性

第二范式:满足第一范式的前提下,表的每一列都必须和主键有关系,消除部分依赖

第三范式:满足第二范式的前提下,表的每一列必须和主键有直接关系,不能是间接关系,消除传递依赖。

16.为什么使用B+树而不是B树

(1)B树只适合随即检索,B+树支持随机检索和顺序检索

(2)减少磁盘I/O,提高空间利用率

(3)B+树适合范围查询

17.优化数据库

SQL优化、缓存、分表、读写分离

18.in 和 exists 的区别

in适合子表比主表数据小的情况

exists适合子表比主表数据大的情况

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值