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中的UUID

UUID作为主键在Mysql中对性能的影响
  • tzdwsy
  • tzdwsy
  • 2015年08月09日 13:33
  • 747

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

UUID 和 GUID 的区别

UUID是一个由4个连字号(-)将32个字节长的字符串分隔后生成的字符串,总共36个字节长。比如:550e8400-e29b-41d4-a716-446655440000 http://gohand...

Mysql的UUID

mysql 里面可以用uuid()语句来生成一个UUID:select uuid();或 select replace(uuid(), '-', '');直接在insert语句中插入UUID作主键的用...

MSSQL,ORACLE,DB2,MYSQL,Access各类数据库使用GUID作为主键

不同的数据库生成GUID的方式不同,当然可以统一用程序来写,比如最后的c++生成guid的方式,但是有时候用数据库自带的方法,可以更简便。 什么是GUID? GUID: 即Glob...

MySQL UUID函数的详解

文章来源:http://www.mysqlops.com/2011/03/01/mysql-uuid.html MySQL UUID函数的详解 MySQL中可以有二类用于生成唯一值性质...

MySQL数据库表的主键到底是用GUID好,还是INT好?

MySQLHTML 待补充    两遍对比的文章: http://krow.livejournal.com/497839.html    http://www.mysqlperform...

为GUID添加默认值

SQL 语句如下:   ALTER TABLE [dbo].[TableName] ADD CONSTRAINT [DF_TableName_GUID] DEFAULT (newsequen...

GUID转换成16位字符串或19位数据(确保唯一)

/// /// 根据GUID获取16位的唯一字符串 /// /// /// public static string GuidTo16String() ...

主键设置,总的来说int>Guid/string

主键设置,总的来说int>Guid/string
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MySql中测试GUID 与Int自增主键 性能对比 总结适用场景
举报原因:
原因补充:

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