现在项目上需要使用MySQL。因为考虑到未来数据量的问题,肯定是需要做集群的,并且有的表在大并发的情况下,Insert操作比较多。因此考虑使用UUID作主键。现在有3个疑问:
第1个就是 UUID做主键肯定会增大存储空间,这些空间倒无所谓,但Innodb会为主键建立索引,所以会不会导致索引太大(32位字符主键),并且因为索引太大而导致查询速度下降?第2个就是,java.util.UUID产生UUID更好还是使用MySQL的UUID()函数更好?第3个如果使用UUID,那么数据类型是使用varchar还是使用varbinary呢? 盼君赐教.

解决方案 »

  1.   

    1.会有点影响,不过不会太大
    2.使用mysql的函数影响的数据库性能(可是可以忽略。),用Java自带的影响的是系统性能。但是都可以忽略。
    3.用char(32),因为uuid是固定32位的,而且char列索引要加快查询速度,弥补1的不足。你懂的。
      

  2.   

    学习楼上,顺便提供下公司的方法供楼主参考
    公司用的是java生成的UUID,生成17位的long类型主键,mysql数据类型是bigint(20)
      

  3.   

    1、比较还是小数据。基本不会影响查询速度
    2、java的UUID方便
    3、varchar2的
      

  4.   


    补充一下,如果用的是Mysql数据库,把uuid列长度设置为char(36);
      

  5.   

    java的好,我们都是用java 的
      

  6.   

    java能轻易解决的问题就用java