自增是使用数据库提供的数值型字段作为自增主键,非自增通常由程序自己生成数值或字符串作为主键,它们各有优缺点。
自增的优点:
(1)数据库自动编号,速度快,而且是增量增长,按顺序存放,对于检索非常有利;
(2)数值型,占用空间小,易排序,在程序中传递也方便;
(3)增加记录时,可以不用指定该字段(系统或非系统),不用担心主键重复问题;
自增的缺点:
(1)因为自动增长,在手动要插入指定ID的记录时会显得麻烦,尤其是当系统与其它系统集成时,需要数据导入时,很难保证原系统的ID不发生主键冲突(前提是老系统也是数字型的)。特别是在新系统上线时,新旧系统并行存在,并且是异库异构的数据库的情况下,需要双向同步时,自增主键将是你的噩梦;
(2)因性能等原因,在向表里插入数据时,如果使用多线程并行方式操作,很可能导致主键冲突进而丢失数据;
(3)在系统集成或割接时,如果新旧系统主键不同是数字型就会导致修改主键数据类型,或者基于第2点的原因不得不将主键改为非自增,此时通常也会同时修改主键数据类型(比如int改为bigint或varchar)。这也会导致其它有关联的表均需要修改,后果同样很严重;
基于以上自增的优缺点,我们很容易可以总结出非自增的优缺点,比如:
缺点是非自增需要程序自己生成不能重复的主键值,通常在性能上低于自增主键(排序、长度、类型、索引结构不紧凑等原因);
优点是人工初始化数据或系统间割接数据时不担心主键冲突问题,并行插入数据时不担心丢失数据;
1023





