mysql 认识
为什么一定要设置一个主键?
因为假如不设置主键的话,其实系统 innoDB 也是会生成一个隐藏的列,作为自增的主键;所以这样还不如我们直接自己定义一个主键,方便自己的使用,而且可以提高查询的效率;
主键用自增还是 UUID?
这个主键还是用自增的比较好;innodb 中的主键是聚簇索引,如果主键是自增的,那么每次插入新的记录,记录就会按照顺序添加到当前索引节点的后续位置,当一页写满,就会自动开辟一个新的页;如果不是自增主键,那么可能会在中间插入,就会引发页的裂变,产生很多碎片;
主键为什么不推荐有业务含义?
因为任何有业务含义的列都有改变的可能性,主键一旦带上业务还以,那么主键就可能发生变更;主键一旦发生变更,该数据在磁盘上的存储位置就会发生变更,有可能会引发页分裂,产生空间碎片;另外带有业务含义的主键,不一定是顺序自增的;那么就会导致数据的插入顺序,并不能保证后面插入数据的主键一定比前面的数据大;如果出现了,后面插入数据的主键比前面的小,就有可能引发页裂变,产生空间碎片。