mysql完成

This commit is contained in:
Estom
2021-09-02 13:26:53 +08:00
parent 4692a74a0b
commit 086e5bd69c
3 changed files with 20 additions and 1 deletions

View File

@@ -89,6 +89,24 @@ CREATE TABLE `table` (
);
```
主键设计的原则:
1. 一定要显式定义主键
2. 采用与业务无关的单独列
3. 采用自增列
4. 数据类型采用int并尽可能小能用tinyint就不用int能用int就不用bigint
5. 将主键放在表的第一列
这样设计的原因:
1. 在innodb引擎中只能有一个聚集索引我们知道聚集索引的叶子节点上直接存有行数据所以聚集索引列尽量不要更改而innodb表在有主键时会自动将主键设为聚集索引如果不显式定义主键会选第一个没有null值的唯一索引作为聚集索引唯一索引涉及到的列内容难免被修改引发存储碎片且可能不是递增关系存取效率低所以最好显式定义主键且采用与业务无关的列以避免修改如果这个条件也不符合就会自动添加一个不可见不可引用的6byte大小的rowid作为聚集索引
2. 需采用自增列来使数据顺序插入,新增数据顺序插入到当前索引的后面,符合叶子节点的分裂顺序,性能较高;若不用自增列,数据的插入近似于随机,插入时需要插入到现在索引页的某个中间位置,需要移动数据,造成大量的数据碎片,索引结构松散,性能很差
3. 在主键插入时会判断是否有重复值所以尽量采用较小的数据类型以减小比对长度提高性能且可以减小存储需求磁盘占用小进而减少磁盘IO和内存占用而且主键存储占用小普通索引的占用也相应较小减少占用减少IO且存储索引的页中能包含较多的数据减少页的分裂提高效率
4. 将主键放在表的第一列好像是习惯,原因我也不知道,试了下是可以放在其他列的......
### 组合索引
@@ -207,3 +225,4 @@ select username, score from t1 where username = '小明'
> MySQL中常用的索引结构有B+树索引和哈希索引两种。目前建表用的B+树索引就是BTREE索引。
> 在MySQL中MyISAM和InnoDB两种存储引擎都不支持哈希索引。只有HEAP/MEMORY引擎才能显示支持哈希索引。

View File

@@ -132,7 +132,7 @@ Mysql服务器之间的主从同步是基于二进制日志BINLOG机制主服
5. slave还会创建一个SQL线程从Relay log里面读取内容从Exec_Master_Log_Pos位置开始执行读取到的更新事件将更新内容写入到slave的db.
### 主从同步方法
### 主从同步机制
![](image/2021-09-02-10-14-13.png)

Binary file not shown.