实测 Mysql UUID 性能(转)
網(wǎng)上普遍認(rèn)為Mysql? 使用 UUID 主鍵性能低下,甚至建議用 自增ID 作為主鍵并用 UUID作唯一索引的方案。但沒有提供具體的數(shù)據(jù)證明使用 UUID 作為主鍵時(shí)性能究竟低下到何種程度。為此我專門做了測試。
測試環(huán)境:WindowsXP ,內(nèi)存 4G , CPU : Duo?T6570 , mysql : 5.1.36
測試準(zhǔn)備:
1、 建表
我建了3 個(gè)表來做性能比對
表一:uuidtest_inno
Sql代碼 ?- CREATE?TABLE?`uuidtest_inno`?(??
- `id`?char(36)?CHARACTER?SET?utf8?NOT?NULL?DEFAULT?'',??
- PRIMARY?KEY?(`id`)??
- )?ENGINE=InnoDB?DEFAULT?CHARSET=latin1??
?
表二:uuidtest_myisam
Sql代碼 ?- CREATE?TABLE?`uuidtest_myisam`?(??
- ??`id`?char(36)?CHARACTER?SET?utf8?NOT?NULL?DEFAULT?'',??
- ??PRIMARY?KEY?(`id`)??
- )?ENGINE=MyISAM?DEFAULT?CHARSET=latin1??
?
?
表三:uuidtest_int
Sql代碼 ?- ????CREATE?TABLE?`uuidtest_int`?(??
- ??????`id`?int(11)?NOT?NULL?AUTO_INCREMENT,??
- ??????`test`?varchar(255)?CHARACTER?SET?latin1?DEFAULT?NULL,??
- ??????PRIMARY?KEY?(`id`)??
- )?ENGINE=MyISAM?DEFAULT?CHARSET=utf8??
?
可以看到,表一使用UUID 主鍵,引擎為 InnodB ;表二使用 UUID 主鍵,引擎為 MyISAM ;表三使用 自增ID ,引擎為MyISAM ;
?
1、 編寫存儲過程
編寫存儲過程分別插入100000 條記錄:
?
p_uuid_inno
Sql代碼 ?- BEGIN??
- ????set?@i?=?0;??
- ????while?@i?<?100000?do??
- ????????????insert?into?uuidtest_inno?value(uuid());??
- ????????set?@i?=?@i+1;??
- ????end?while?;??
- END??
?
p_uuid_myisam
Sql代碼 ?- BEGIN??
- ????set?@i?=?0;??
- ????while?@i?<?100000?do??
- ????????????insert?into?uuidtest_myisam?value(uuid());??
- ????????set?@i?=?@i+1;??
- ????end?while?;??
- END??
?
?
p_uuid_int
Sql代碼 ?- BEGIN??
- ????set?@i?=?0;??
- ????while?@i?<?100000?do??
- ????????????insert?into?uuidtest_int(test)?value("test");??
- ????????set?@i?=?@i+1;??
- ????end?while?;??
- END??
?
1、 運(yùn)行
[SQL]?call?p_uuid_int;
影響的數(shù)據(jù)欄:?0
時(shí)間:?12.922ms
?
call?p_uuid_myisam;
影響的數(shù)據(jù)欄:?0
時(shí)間:?15.078ms
?
call?p_uuid_inno;
影響的數(shù)據(jù)欄:?0
時(shí)間:?4460.297ms
?
結(jié)論:當(dāng)數(shù)據(jù)表的引擎為MyISAM 時(shí),自增 ID 無疑是效率最高的, UUID 效率略低,但不會低到無法接受。一旦數(shù)據(jù)引擎為 InnodB 時(shí),效率下降非常嚴(yán)重,已經(jīng)達(dá)到令人發(fā)指的地步。由于 InnodB 主鍵采用 聚集索引 ,會對插入的記錄進(jìn)行物理排序,而 UUID本身基本上是無序的,所以造成了巨大的 I/O 開銷。所以如果使用 innodB? 千萬不要使用 UUID 。
?
?
謝謝?
2 樓 gaizai 2012-02-29?? 測試不嚴(yán)謹(jǐn),你沒有測試innodb下的int,一樣的速度。?
1 樓 laoxing521 2011-04-19?? 樓主有心如果斷定是因?yàn)閕nnodb是因?yàn)槲锢砼判蚨斐尚阅軗p失, 那么是什么做主鍵就沒關(guān)系了
只要是無序的數(shù)字, 字符串做主鍵,都要有這樣的結(jié)果
人們講用uuid會影響性能, 是說UUID的生成效率不高. 而非插入效率,? 生成了之后,UUID就是一普通字符串了.
?
轉(zhuǎn)載于:https://www.cnblogs.com/tonykan/archive/2012/11/26/2788422.html
總結(jié)
以上是生活随笔為你收集整理的实测 Mysql UUID 性能(转)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 钟馗引福图是谁画的啊?
- 下一篇: 一个apk多个ICON执行入口