1.一条SQL语句在Mysql中的执行过程
1.通过连接器期限权限。
2.再通过分析器进行词法分析与语法分析,构建解析树。
3.再交由优化器选择合适的索引和表连接顺序,选择一个最佳的执行计划。
4.最后再由执行器将查询结果返回给客户端。
2.Mysql的存储引擎有哪些?有什么区别?
1.InnoDB
1.支持事务、外键、行级锁。
2.适合高并发情况。
2.MyISAM
1.不支持事务和外键,支持表级锁。
2.适合读取多、更新少的情况,如数据仓库。
3.Memory
1.将数据存储在内存中,读取速度快。
2.适合做缓存。
3.Mysql的索引类型有哪些?
从索引性质上分:
1.主键索引
每个表只能有一个主键索引,且主键值不能为NUll
2.唯一索引
唯一索引允许NULL值
3.联合索引
由多个列组成的索引,适用于多列的查询条件
4.普通索引
一般指非主键索引且非唯一索引
5.全文索引
6.空间索引
从B+索引角度上分:
1.聚簇索引
叶子节点存储完整的数据行数据。
2.非聚簇索引
叶子节点仅保存索引字段和主键的值。
从数据结构角度上分:
1.B+树索引
通过树形结构存储数据,适用于范围查询和精确查询,支持有序数据的快速查找、排序和聚合操作。是Mysql默认的索引类型,常用于InnoDB和MyISAM引擎。
2.哈希索引
基于哈希表的结构,适用于等值查询,查询速度非常快,但不支持范围查询。哈希索引不存储数据的顺序,常用于Memory引擎。
3.R-树索引
4.倒排索引
4.Mysql中的回表是什么?
是指在使用非聚簇索引作为条件查询时,由于非聚簇索引只存储了索引字段的值和对应的主键值,无法得到其他数据。如果要查询数据行中其他的数据,需要根据主键去聚簇索引查找完整的数据行。
5.Mysql索引的最左前缀匹配原则时什么?
在使用联合索引时,查询条件必须从索引的最左侧开始匹配。如果一个联合索引包含多个列,查询条件必须包含第一个列的条件,然后是第二个列,以此类推。
6.Mysql的覆盖索引
是指非聚簇索引中包含了查询所需的所有字段,从而时查询可以仅通过访问非聚簇索引而不需要访问实际的表数据。
7.Mysql中的索引下推
是针对联合索引的,它是在存储引擎层根据索引条件先进行过滤,然后再进行回表,来减少回表次数。
8.在Mysql中建索引时需要考虑哪些情况?
1.索引不是越多越好,索引会占用空间,影响增删改的效率
2.对于字段中的值有大量重复的不要建索引
3.对于一些长字段不能建索引
4.当数据表的修改频率远大于查询频率时
5.频繁作为查询条件的字段应该建索引
6.对经常在order by、group by、distinct后面的字段建立索引
9.MySQL中索引失效的情况
1.使用了联合索引却不符合最左前缀匹配原则
2.索引中使用了运算
3.索引使用了函数
4.like的随意使用:索引是从左侧开始查找的,占位符放在了最左边开头
5.or的随意使用
等等
10.如何排查索引效果
通过在查询前加上EXPLAIN,可以查看Mysql选择的执行计划,了解是否使用了索引、使用了哪个索引、估算的行数等信息。
主要观察EXPLAIN结果以下几点:
type(访问类型):index或range表示使用了索引
key(使用的索引):NULL说明未使用
rows(扫描的行数)
11.Mysql是如何实现事务的?
主要是通过锁、Redo log、Undo log、MVCC来实现事务
锁:使用数据并发修改的控制,满足事务的隔离性。
Redo log:记录事务对数据库的所有修改,当Mysql发生宕机或崩溃时,通过重做就可以恢复数据,满足事务的持久性。
Undo log:记录事务的反向操作,简单来说就是保存数据的历史版本,用于事务的回滚,使得事务执行失败后可以恢复到之前的样子,实现原子性和隔离性。
MVCC:满足了非锁定读的需求,提高了并发度,实现了读已提交和可重复读两种隔离级别,实现了事务的隔离性。
12.Mysql中的长事务可能会导致哪些问题?
1.长时间的锁竞争,阻塞资源:
2.死锁风险
因为多个事务可能在互相等待对方释放锁,导致系统无法继续执行
3.回滚导致时间浪费
13.Mysql中如何进行SQL调优?
主要是通过观察慢SQL,然后利用EXPLAIN分析查询语句的执行计划
1.利用联合索引进行覆盖索引的优化,避免回表的发生
2.避免select *,只查询必要字段
3.不对无索引字段进行排序
4.避免%like,导致全表扫描
等等
14.事务隔离级别有哪些?
1.读未提交
可能会导致脏读
2.读已提交
可能导致不可重复读
3.可重复读(mysql默认级别)
可能会导致幻读
4.串行化
15.Mysql的主从同步机制
用于将主数据库上的数据复制到一个或多个数据库中。
主要是通过二进制日志(binlog)实现数据的复制。主数据库在执行写操作时,会将这些操作记录到binlog中,然后推送给从数据库,从数据库重放对应的日志即可完成复制。
16.Mysql中的MVCC是什么?
MVCC(多版本并发控制)是一种并发控制机制,允许多个事务同时读取和写入数据库,而无需互相等待,从而提高数据库的并发性能。