刚开始使用mysql,要是用非常大的数据结构,得知mysql没有uuid的数据类型,只能使用varchar(36),到底性能怎么样呢,网上各有说辞,做个测试看看吧,有没有差距,到底差多少。
下面是测试代码,改下循环体中的插入语句分别测试uuid在innodb和myisam和int在innodb和myisam下插入1000条数据所用时间。
DELIMITER $$
DROP PROCEDURE IF EXISTS uuidinno;
CREATE PROCEDURE uuidinno()
BEGIN
DECLARE j INT DEFAULT 0;
WHILE j < 10000 DO
INSERT INTO uuidtest_inno(id) VALUES (UUID());
SET j = j + 1;
END WHILE;
END$$
inno-
执行耗时 : 6 min 38 sec
传送时间 : 0 sec
总耗时 : 6 min 38 sec
myisam-
执行耗时 : 0.388 sec
传送时间 : 0 sec
总耗时 : 0.389 sec
innoDB表要排序,所以非常慢,myisam到很速度。
这个是int插入10000条数据测试。耗时如下:
inno-
执行耗时 : 6 min 39 sec
传送时间 : 0 sec
总耗时 : 6 min 39 sec
myisam-
执行耗时 : 0.268 sec
传送时间 : 0.001 sec
总耗时 : 0.270 sec
innodb下也很慢,几乎和uuid耗时一样。myisam就不同了使用int比使用字符串的uuid快了40%以上,所以大家使用时候还是小心为妙。