MYSQL主从复制原理
主:将修改数据的sql语句放进binlog中。
从:
- 开启从模式之后,负责从master节点中拉取binlog。
- 从数据库拿到binlog后,执行sql语句。
MYSQL中Myisam和Innodb有什么区别
- Innodb支持事务,Myisam不支持事务。
- Innodb支持行级锁,Myisam支持表级锁
- Innodb支持外键,Myisam不支持外键
Innodb引擎四大特性
- 插入缓冲
- 二次写
- 自适应哈希索引
- 预读
哪一种驱动count(*)更快
Myisam更快,会维护一个计数器,可以直接调取。
char和varchar有什么区别
char是固定长度类型
varchar是变长类型。
例如:
varchar(50)表示最长不能超过50,varchar(50)和varchar(100)存储hello字符串长度一样。
int(20)中20的含义
20表示显示最大的宽度,如果不够会补齐。不会影响存储的范围。
Mysql有多少种日志
- 错误日志:记录执行出错的信息
- 查询日志:记录所有对数据库请求的信息
- 慢查询日志:设置一个阈值,将执行时长超过这个阈值的所有语句记录
- 二进制日志:记录对数据库执行更改的所有操作
- 中继日志:用于给slave回复数据
- 事务日志:重做日志redo和回滚undo
四种隔离级别
- 读取未提交数据
- 读取已提交数据
- 可重复读数据
- 可串行化
binlog的日志录入格式
- statement:每一条修改数据的sql都会记录在binlog中
- row:不记录上下文信息,只保存哪一条记录被修改
- mixedlevel:前两种模式的中间态
什么是事务
事务是满足acid特性的一组操作。
acid
- a:原子性
- c:一致性
- i:隔离性
- d:持久性
Myisam和Innodb的区别
Myisam
- 没有事务
- 只读类应用
- 做很多count计算
Innodb
- 支持事务
- 支持行锁
- 有acid的特性
索引使用的场景
- 对于比较小的表,没有必要建立索引。
- 对于中等大小的表,建立索引有效
- 对于大型的表,建立索引查询会加快速度,但是也会增加维护的时间,每当增删改一条数据时,还要自动维护这个表数据。
B-Tree
- 所有节点具有相同的深度。
- 一个节点的所有的key从左到右非递减的顺序排列。
- 如果一个指针指向的key大于keyi小于keyi+1,所以指针指向的该节点中的所有key都是在keyi和keyi+1之间。
B+Tree
与B-Tree不同的是
- 每个节点的上限是2d不是2d+1,d是节点的出度,也就是最多指向的key值。
- 节点不存储data,只存储key。
- 叶子结点不存储指针。
Innodb使用的B+Tree,分为主索引和辅助索引。
主索引记录着完整的data,这种索引叫做聚簇索引,因为一个表不能把一条数据存储在两个不同的地方,所以一个表中只能有一个聚簇索引。
索引的优点
- 创建唯一索引,保证索引字段唯一性。
- 加大检索的速度
索引的缺点
- 创建索引,随着数据量的增大,创建索引和维护索引的时间会增大
- 索引占据物理空间,聚簇索引占据的空间会更大。
- 对数据库进行增删改时,也要随之维护索引,需要额外的开销。
索引失效
- 条件语句中有or
- like中%在开头
- 如果条件中有字符串,则需要用引号括起来,否则不会使用索引
那种字段适合建立索引
- 经常出现在where、order by、group by中的语句。
- 经常用在表连接的字段使用索引。