文章目录
1、MySQL的复制原理以及流程
基本原理流程,3个线程以及之间的关联;
主:binlog线程——记录下所有改变了数据库数据的语句,放进master上的binlog(二进制日志)中;
从:io线程——在使用start slave 之后,负责从master上拉取 binlog 内容,放进 自己的relay log(中继日志)中;
从:sql执行线程——执行relay log中的语句;
2、MySQL中myisam与innodb的区别,至少5点
5点不同:
innodb myisam 事务 √ × 锁 行锁 表锁 MVCC √ × 外键 √ × 全文索引 × √ (2)、innodb引擎的4大特性
插入缓冲(insert buffer);
二次写(double write);
自适应哈希索引(ahi);
预读(read ahead) 。
(3)、2者selectcount(*)哪个更快,为什么
- myisam,内部维护了一个计数器,可以直接调取。
3、MySQL中varchar与char的区别以及varchar(50)中的50代表的涵义
(1)、varchar与char的区别
- char:固定长度,字符数组
- varchar:可变长,字符串
(2)、varchar(50)中50的涵义
- 最多50字符,存实际长度,char空字符占位
(3)、int(20)中20的涵义
- 最大255,显示20位,可设置参数高位补0
(4)、mysql为什么这么设计
- 一般没用,可能有些需求要显示固定长度
4、innodb的事务与日志的实现方式
(1)、有多少种日志;
- 错误日志
- 查询日志
- 慢查询日志
- 二进制日志
- 中继日志
- 事务日志
(2)、事物的4种隔离级别
- 读未提交
- 读已提交
- 可重复读
- 串行
(3)、事务是如何通过日志来实现的,说得越深入越好。
- 写数据前先写缓冲日志
5、binlog的几种日志录入格式以及区别
binlog的日志格式
- Statement(语句):记录写修改数据的SQL,性能高,只记录修改导致主从可能存在问题;
- Row(行):记录每一行修改细节,更准确,但日志量大;
- Mixedlevel(混合):前两种混合
6、sql优化
(1)、explain出来的各种item的意义;
select_type select子句的类型 type 在表中找到所需行的方式 possible_keys 涉及到的索引 key 实际用到的索引 key_len 索引中使用的字节数 ref 连接匹配条件 Extra 重要的额外信息 (2)、profile的意义以及使用场景;
- 查询SQL执行时间,CPU/内存占用,各种锁花的时间
7、表中有大字段X(例如:text类型),且字段X不会经常更新,以读为为主,请问
(1)、您是选择拆成子表,还是继续放一起;
- 拆
(2)、写出您这样选择的理由。
- 不用X查询效率高。与X相关的操作就麻烦点,能提升性能就值得。
8、MySQL中InnoDB引擎的行锁是通过加在什么上完成(或称实现)的?为什么是这样子的
- 索引,查询条件不用索引就是表锁
9、常用的索引有哪些种类?
- 普通索引: 即针对数据库表创建索引
- 唯一索引: 与普通索引类似,允许有空值
- 主键索引: 特殊的唯一索引,不允许有空值。
- 组合索引: 多个字段联合作为一个组合索引。
10、事务ACDI
- 原子性:最小单位
- 持久性:提交后挂了也不影响
- 一致性:事务执行前后数据保持一致
- 隔离性:各事务是独立的
11、幻读、脏读、不可重复读
- 幻读:一个事务两次COUNT的结果不一致
- 脏读:一个事务在另一个事务更新与回滚之间读取的结果不正确
- 不可重复读:一个事务对同一记录两次查询的结果不一致
12、锁
- 类别区分:读锁(共享锁)、写锁(排他锁)
- 粒度区分:表级锁、行级锁、页级锁(锁相邻记录)
- 悲观锁,每次读都加锁;乐观锁:版本号机制