MySql中测试GUID 与Int自增主键 性能对比 总结适用场景

原创 2013年12月04日 10:10:26

一. 创建以下三个数据表: int 主键自增表, guid主键表, 关联以上两个表的关系表tbl_test_relation

CREATE TABLE `tbl_test_int` (
    `id` INT(11) NOT NULL AUTO_INCREMENT,
    `name` VARCHAR(50) NULL DEFAULT NULL,
    `comment` VARCHAR(100) NULL DEFAULT NULL,
    PRIMARY KEY (`id`)
)
COMMENT='测试int主键性能'
COLLATE='utf8_general_ci';


CREATE TABLE `tbl_test_measure` (
    `code` CHAR(36) NOT NULL,
    `deviceID` INT(50) NULL DEFAULT NULL,
    `value` INT(50) NULL DEFAULT NULL,
    `value2` INT(50) NULL DEFAULT NULL,
    PRIMARY KEY (`code`)
)
COMMENT='测试guid作唯一';

CREATE TABLE `tbl_test_relation` (
    `id` INT(11) NOT NULL AUTO_INCREMENT,
    `intvalue` INT(11) NOT NULL DEFAULT '0',
    `codevalue` CHAR(36) NOT NULL DEFAULT '0',
    PRIMARY KEY (`id`)
)
COLLATE='utf8_general_ci';

二. 向数据表插入数据

Insert into tbl_test_int( name,comment) values
    ('TestMY', '哈哈,呵呵');

逐条插入,100万条数据耗时,30分钟左右

 Insert into tbl_test_measure(code,deviceID,value,value2) values ( GUID.NewGuid(), 1,2,3);

逐条插入,100万条数据耗时2845秒


 Insert into tbl_test_relation (intvalue,codevalue)
 ( select a.id as id , b.code as code  from tbl_test_int a , tbl_test_measure b where a.id = b.deviceID   
   and a.id < 100000  and a.id > 40000 )
再插入到关系表中, 使用时间30秒左右


三.分别查询其中的性能

select a.id, a.codevalue, b.name from tbl_test_relation a , tbl_test_int b where a.intvalue = b.id     limit 10000,80000;
/* Affected rows: 0  已找到记录: 79,900  警告: 0  持续时间 1 query: 0.110 sec. (+ 0.967 sec. network) */

select a.id, a.codevalue, b.value2,b.value from tbl_test_relation a , tbl_test_measure b where a.codevalue = b.code   limit 10000,80000;
/* Affected rows: 0  已找到记录: 79,900  警告: 0  持续时间 1 query: 0.234 sec. (+ 1.997 sec. network) */

所用时间相差一倍左右


select a.id, a.codevalue, b.name from tbl_test_relation a , tbl_test_int b where a.intvalue = b.id     limit 9000,90000;
/* Affected rows: 0  已找到记录: 80,900  警告: 0  持续时间 1 query: 0.094 sec. (+ 0.998 sec. network) */
/* 更新查询历史时出现错误: Failed to set data for '1' */
select a.id, a.codevalue, b.value2  from tbl_test_relation a , tbl_test_measure b where a.codevalue = b.code   limit 9000,90000;
/* Affected rows: 0  已找到记录: 80,900  警告: 0  持续时间 1 query: 0.203 sec. (+ 1.856 sec. network) */
/* 更新查询历史时出现错误: Failed to set data for '1' */


四.测试总结

1.GUID可以确保数据唯一性,数据安全,数据可移植性强,适用于分布式数据库中相同表的,不同库中的存储。 但其中的Select、Update、Insert 相对于Int,在百万级数据中来讲慢一半左右
2.ID使用Int自增做唯一,可以提高数据操作的性能,但需要注意其唯一的操作

MySQL之——mysql5.5 uuid做主键与int做主键的性能实测

偶然的机会,得知mysql主键的类型采用 varchar 存UUID 的查询性能没有int型做主键好。网上查询大量资料,都是停留在理论上的,因此,自己写了代码进行实测,以下结果仅供参考,不具备权威性。...
  • l1028386804
  • l1028386804
  • 2016年04月13日 09:52
  • 5811

数据库主键设计-用GUID还是Int(int32,int64)做主键(primaryKey)

数据库主键设计-用GUID还是Int(int32,int64)做主键(primaryKey) 使用INT做主键的优点:     1、需要很小的数据存储空间,仅仅需要4 byte 。     2、...
  • huwei2003
  • huwei2003
  • 2015年12月04日 18:21
  • 4489

数据库主键用 int自增序列 还是 GUID

int自增序列 GUID性能测试 http://blog.csdn.net/fox123871/article/details/6578922测试结果表明在最常用的插入删除上, int主键的性能并没...
  • caib1109
  • caib1109
  • 2016年07月05日 16:03
  • 2676

sqlite采用UUID主键和int型自增主键性能对比测试

作者:孤风一剑   发布:2014-01-27 13:04   栏目:数据库开发   点击:1,499次   抢沙发   最近在工作中,遇到到了sqlite主键类型选择的问题,于...
  • u010129251
  • u010129251
  • 2015年10月03日 19:28
  • 1212

MySQL 使用自增ID主键和UUID 作为主键的优劣比较详细过程(从百万到千万表记录测试)

测试缘由  一个开发同事做了一个框架,里面主键是uuid,我跟他建议说mysql不要用uuid用自增主键,自增主键效率高,他说不一定高,我说innodb的索引特性导致了自增id做主键是效率最好的,为了...
  • mchdba
  • mchdba
  • 2016年08月27日 17:44
  • 23846

MySQL 使用自增ID主键和UUID 作为主键的优劣比较详细过程(从百万到千万表记录测试)

版权声明:本文为博主原创文章,未经博主允许不得转载。 目录(?)[+]   测试缘由   一个开发同事做了一个框架,里面主键是uuid,我跟他建议...
  • u012339998
  • u012339998
  • 2017年03月18日 16:13
  • 744

Guid和Int类型主键效率的比较

  • 2011年12月17日 12:16
  • 4KB
  • 下载

数据表自增主键(int)溢出解决方案整理

sql自增主键溢出解决方案: 简单粗暴法 重置自增字段法 偷换ID法 笨方法 注意注意 简单粗暴法 适用于数据不重要的情况下,可以进行情况,建议先备份数据 第一种 清...
  • fengyunxuanhai
  • fengyunxuanhai
  • 2018年01月11日 16:37
  • 68

Mysql 使用UUID和自增主键ID性能对比测试

测试缘由  一个开发同事做了一个框架,里面主键是uuid,我跟他建议说MySQL不要用uuid用自增主键,自增主键效率高,他说不一定高,我说innodb的索引特性导致了自增id做主键是效率最好的...
  • wmq880204
  • wmq880204
  • 2016年11月22日 16:05
  • 538

MYSQL获取自增主键【4种方法】

通常我们在应用中对mysql执行了insert操作后,需要获取插入记录的自增主键。本文将介绍java环境下的4种方法获取insert后的记录主键auto_increment的值: 通过JDBC2....
  • UltraNi
  • UltraNi
  • 2013年07月17日 13:28
  • 46343
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MySql中测试GUID 与Int自增主键 性能对比 总结适用场景
举报原因:
原因补充:

(最多只允许输入30个字)