分库分表键的选择

名词解释

业务主键:自然主键,将有业务逻辑的字段作为主键,比如订单号,身份证号等

逻辑主键:代理主键,生成一个与业务无关的数据作为主键,比如 sequence,uuid 等

使用业务主键

优点

  • 简单易懂,容易理解,数据可读性高(尤其是作为外键的时候)
  • 不引入另外字段
  • 业务主键一般会在多个表存在,可以作为冗余数据,不易丢失

缺点

  • 业务变化比较大,有可能出现主键变化的情况,关联表也要跟着变
  • 业务变化比较大,有可能出现主键重复的情况
  • 有时候需要多个业务字段联合起来才能作为主键
  • 一般业务主键比较长,增加数据传输量

使用逻辑主键

优点

  • 一般使用整数作为主键,效率高,数据量小
  • 非业务数据,基本不会被修改

缺点

  • 需要单独生成,增加系统复杂性
  • 主键丢失,会丢失关联,很难找回
  • 作为外键,数据可读性不高

分库分表

分库分表框架下,建议使用逻辑主键,优点除开上面所列,还有下面几项:

  • 避免业务主键重复带来的热点数据过于集中,分片不均
  • 避免业务主键生成规则带来的数据分片不均
  • 业务主键修改导致数据需要换表甚至换库
  • 使用 sequence 可以在扩容时,减小数据传输量,比如 4 表扩 8 表时,采用取模算法一半的数据不用动

Search

    欢迎关注我的微信公众号

    Bishion

    Table of Contents