我有这个想法,
我的标的主键都是生成的,跟具体业务数据没有相关性。我想过2个法子:
1: 是很多人都用的 sequence 生成的,但使我担心以后导入会重复么?
2: 我用 UUID 生成器生成的字符串(用 MAC 地址 + System.currentTimeMills()) ,这个重复的概率太低了,我又担心做主键可能效率比数字低很多,但是我不知道怎么比较这两种效率?我用 UUID 可行么?

解决方案 »

  1.   

    字符串的比较是一个一个字符的比较,而整形只需要比较一次,你去慢慢衡量吧
    例如:
    abcdefg和abcdefgh要比较8次,而100000000和1000000000只需要比较-次
      

  2.   

    1: 是很多人都用的 sequence 生成的,但使我担心以后导入会重复么?    效率高是显然的,
        为什么会重复? sequence是可以你自己控制的
        主键都是生成的,跟具体业务数据没有相关性,那么就是解决重复问题也很简单2: 我用 UUID 生成器生成的字符串(用 MAC 地址 + System.currentTimeMills()) ,这个重复的概率太低了,我又担心做主键可能效率比数字低很多,但是我不知道怎么比较这两种效率? 对于服务器,MAC 地址这个东西是不变的,放在主键上有什么意思?
      

  3.   

    不管数字还是字符在oracle内都是以它内部的格式处理,只与长度有关。
      

  4.   

    我说的 UUID 是 :e0d36b8c-c9e7-3519-9607-8ace76c120cd 这种形式,
    我跑了 2 百万个,都没有发现有重复的, 我是使用 MAC 地址 + System.currentTimeMills() 种子使用 UUID 生成器生成的 。是不是我导入数据就一次性导入所有数据而不能只导入一部分?
    [ lilyway(cicydos) ] 说的
    至于长度有关是怎么回事?
    我猜想 Oracle Number 光一个数字能表示 19 位么,最大最小精度分别是多少啊 ?
    当然我知道比起字符串效率还是应该高点吧。
      

  5.   

    用UUID和rowid有什么区别,如果主键和业务完全脱离,就不要建主键了
      

  6.   

    Sorry.看错了,有位兄弟没给分。