mysql设计主键id的时候 有的自增int 有的说要varchar(32) 哪个好

mysql设计主键id的时候 有的自增int 有的说要varchar(32)

阅读 11k
4 个回答

自增长的id适用于单机系统,因为自增长id很难处理分布式存储的数据表,尤其是需要合并表格的情况下;并且自增长id受限于数据量,int本身的长度并不适用于大数据量。
用varchar的通常都是分布式系统生成的一套UUID为主键的方案,用UUID当主键适合大量数据中的插入和更新操作,尤其是在高并发和分布式环境下,也适合跨服务器合并数据库

  • 首先设置主键 只需要满足唯一即可,因此 int 和 varchar 都可以作为主键的数据类型
  • int 能自增长。当需要进行排序,比较操作时 int 比 varchar 好。
  • 下面提供一种比较方案可以参考一下。数据量较少

mysql 主键INT 与 varchar 比较

  • 创建两个表格,一张 用int 一张用 varchar
create table person_int(id int primary key auto_increment,name varchar(10),sex char(1));
create table person_uuid(id varchar(36) primary key ,name varchar(10),sex char(1));
  • 两张表分别插入1000 条数据

    DROP PROCEDURE IF EXISTS person_add_int;
    DELIMITER $
    CREATE PROCEDURE person_add_int()
    BEGIN
        DECLARE i INT DEFAULT 1;
        WHILE i<=1000 DO
            insert into person_int  (name,sex) select '张三','1' ;
            SET i = i+1;
        END WHILE;
    END $
    
    CALL person_add_int()
    

    2

    耗时 56.59s

    DROP PROCEDURE IF EXISTS person_add_uuid;
    DELIMITER $
    CREATE PROCEDURE person_add_uuid()
    BEGIN
       DECLARE i INT DEFAULT 1;
       WHILE i<=1000 DO
          insert into person_uuid select uuid(),'张三','1' ;
           SET i = i+1;
       END WHILE;
    END $
    
    CALL person_add_uuid()
    

    123

    耗时62.207s

相同数据的1000条记录数据容量使用情况

3

  • 添加索引 索引类型 unique 索引方法btree

    • int类型

      ![1559185909774](assets/1559185909774.png)

    • varchar类型

      1

进行select count() 查询

42

自增id插入和查询速度快,消耗内存资源少。uuid比较大,会影响性能,索引需要内存也多。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏