场景:
现有用户黑名单表, 需要身份证号和手机号联合确定唯一标识, 每天需要往里增量更新数据.
所以, 要求:
1) 查询时, 根据 身份证 或 手机 能够快速查询.
2) 增量更新时要尽可能提高速度.
思路一:
我的思路是:
1) 设置自增主键. 自增主键的好处就是可以增加插入时的效率. 以为会减少主键索引树的分裂重建(Innodb引擎).
2) 身份证和手机号一起取md5, 设为唯一键, 作为唯一约束, 以方便sqoop导数据时根据该字段, 选择更新还是新插入.
这样的话, 起码要有四个索引: 主键, 身份证+手机号md5, 身份证号, 手机号.
思路二:
以前我的做法就是直接用 身份证+手机MD5 作为主键.
请大神指点, 哪种思路更优?
推荐自增主键,
MD5导致乱序插入,而且太长,影响二级索引。
要保证唯一性,身份证+手机号建唯一索引,
如果还需要根据身份证或手机号的单一条件查询,身份证从存储的角度比手机号长很多,额外建一个手机号的索引就可以了。而身份证的谓词条件可以用到上面唯一索引的最左前缀匹配。