1 为什么要⼀定要设置主键?
其实这个不是⼀定的,有些场景下,⼩系统或者没什么⽤的表,不设置主键也没关系,mysql最好是⽤⾃增主键,主要是以下两个原因:如果定义了主键,那么InnoDB会选择主键作为聚集索引、如果没有显式定义主键,则innodb 会选择第⼀个不包含有NULL值的唯⼀索引作为主键索引、如果也没有这样的唯⼀索引,则innodb 会选择内置6字节⻓的ROWID作为隐含的聚集索引。所以,反正都要⽣成⼀个主键,那你还不如⾃⼰指定⼀个主键,提⾼查询效率!
2.⾃增主键⽤完了怎么办?
在mysql中,Int整型的范围(-2147483648~2147483648),约20亿!因此不⽤考虑⾃增ID达到最⼤值这个问题。⽽且数据达到千万级的时候就应该考虑分库分表了。
3.为什么不直接存储图⽚、⾳频、视频等⼤容量内容?
我们在实际应⽤中,都是⽂件形式存储的。mysql中,只存⽂件的存放路径。虽然mysql中blob类型可以⽤来存放⼤容量⽂件,但是,我们在⽣产中,基本不⽤!主要有如下⼏个原因:
- Mysql内存临时表不⽀持TEXT、BLOB这样的⼤数据类型,如果查询中包含这样的数据,查询效率会⾮常慢。
- 数据库特别⼤,内存占⽤⾼,维护也⽐较麻烦。
- binlog太⼤,如果是主从同步的架构,会导致主从同步效率问题!因此,不推荐使⽤blob等类型!