1、MySQL 的复制原理以及流程
基本原理流程,3 个线程以及之间的关联;
1. 主:binlog 线程——记录下所有改变了数据库数据的语句,放进 master 上的 binlog
中;
2. 从:io 线程——在使用 start slave 之后,负责从 master 上拉取 binlog 内容,放进
自己的 relay log 中;
3. 从:sql 执行线程——执行 relay log 中的语句;
2、MySQL 中 myisam 与 innodb 的区别,至少 5 点
(1)、问 5 点不同;
1>.InnoDB 支持事物,而 MyISAM 不支持事物
2>.InnoDB 支持行级锁,而 MyISAM 支持表级锁
3>.InnoDB 支持 MVCC, 而 MyISAM 不支持
4>.InnoDB 支持外键,而 MyISAM 不支持
5>.InnoDB 不支持全文索引,而 MyISAM 支持。
(2)、innodb 引擎的 4 大特性
插入缓冲(insert bu'er),二次写(double write),自适应哈希索引(ahi),预读(read
ahead)
(3)、2 者 selectcount(*)哪个更快,为什么
myisam 更快,因为 myisam 内部维护了一个计数器,可以直接调取。
3、MySQL 中 varchar 与 char 的区别以及 varchar(50)中的 50 代表的涵义
(1)、varchar 与 char 的区别
char 是一种固定长度的类型,varchar 则是一种可变长度的类型
(2)、varchar(50)中 50 的涵义
最多存放 50 个字符,varchar(50)和(200)存储 hello 所占空间一样,但后者在排序时会
消耗更多内存,因为 order by col 采用 -xed_length 计算 col 长度(memory 引擎也一
样)
(3)、int(20)中 20 的涵义
是指显示字符的长度
但要加参数的,最大为 255,比如它是记录行数的 id,插入 10 笔资料,它就显示
00000000001 ~~~00000000010,当字符的位数超过 11,它也只显示 11 位,如果你
没有加那个让它未满 11 位就前面加 0 的参数,它不会在前面加 0
20 表示最大显示宽度为 20,但仍占 4 字节存储,存储范围不变;
(4)、mysql 为什么这么设计
对大多数应用没有意义,只是规定一些工具用来显示字符的个数;int(1)和 int(20)存储和
计算均一样;
4、问了 innodb 的事务与日志的实现方式
(1)、有多少种日志;