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适合子表比主表数据大的情况