1.一些情况下显示主键索引便于查找,提高查询效率
2.自增;UUID可能出现页分裂,产生表碎片,性能不好(插入时间长、占用空间大)
3.有业务含义可能涉及内容的修改,数据在磁盘的储存位置可能发生变更;且有业务含义的情况下主键不是顺序自增的,可能存在新插入的数据没有先前插入的数据大的情况,这两种情况可能导致页分裂、产生空间碎片
4.一般用tinyint型,enum order by操作效率低,需要额外操作,且当存储数字时不利于操作(如:0 ,‘0’)
5.精确到分可以用int,以元为基本单位用decimal(不用以二进制储存的float和double,存在误差)
6.varchar 直观,但插入数据没有校验(存在歧义2019111),时间比较运算复杂;timestamp 4字节 支持跨时区,但范围有限 1970~2038;datetime 8字节 范围大,但不支持跨时区;bigint 8字节 表示范围大,但需要自己维护,不方便
7.效率低;一般用HDFS(Hadoop File System)储存;mysql提供两种存储大文件的类型text和blob但不常用,因为内存临时表不支持,查询时只能使用磁盘临时表,查询效率低,以及数据内容大,binlog内容多导致主从同步效率低
8.索引性能不好,增加数据库使用开销;查询时可能出现不可预料的结果,而浪费时间排查bug
PS:自增主键用完(通常不会出现这种情况就已经分库分表),mysql5.6以后的版本可以通过改从库表结构(如BigInt)再主从切换解决(可能出现数据丢失的情况)