淺析MySQL 主鍵使用數字還是uuid查詢快
在實際開發中mysql的主鍵不能重復,可能會采用主鍵自增,為瞭防止主鍵重復也可能會采取雪花算法之類的算法保證,這兩種主鍵保存的都是number類型 但是實際開發中可能會生成uuid作為主鍵那麼疑問來瞭,到底哪種主鍵的效率高呢?
下面由測試來驗證:
1.首先我們先創建一個表,用存儲過程生成100w條數據然後分析:
創建表:
CREATE TABLE `my_tables` ( `id` VARCHAR(32) NOT NULL , `name` varchar(32) DEFAULT NULL, `age` int(32) DEFAULT NULL, `time` varchar(32) DEFAULT NULL, `pwd` varchar(32) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
創建存儲過程:
DROP PROCEDURE IF EXISTS my_insert; CREATE PROCEDURE my_insert() BEGIN DECLARE n int DEFAULT 1; loopname:LOOP INSERT INTO `my_tables`(`name`,`age`,`time`,`pwd`) VALUES ('張三', 18, '0:0:0:0:0:0:0:1', '369'); SET n=n+1; IF n=1000000 THEN LEAVE loopname; END IF; END LOOP loopname; END;
生成數據:
CALL my_insert();
第一種方式采用的主鍵是number類型的
下圖是采用explain分析得出
2.接下來繼續創建另一張表並生成數據
CREATE TABLE `my_tables2` ( `id` VARCHAR(32) NOT NULL , `name` varchar(32) DEFAULT NULL, `age` int(32) DEFAULT NULL, `time` varchar(32) DEFAULT NULL, `pwd` varchar(32) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
註意:這張表的主鍵采用的是varchar類型的
創建存儲過程並生成數據:
DROP PROCEDURE IF EXISTS proc_insert; DELIMITER $ CREATE PROCEDURE pro_insert2() BEGIN DECLARE i INT DEFAULT 1; WHILE i<=1000000 DO INSERT INTO `my_tables2`(id,`name`,`age`,`time`,`pwd`) VALUES (i,'張三', 18, '0:0:0:0:0:0:0:1', '369'); SET i = i+1; END WHILE; END $; CALL pro_insert2();
下圖是第二種用主鍵查詢的結果
如果有小夥伴對explain不太明白的可以去看看博客 https://blog.csdn.net/why15732625998/article/details/80388236
前後分析得出 使用uuid或者數字作為主鍵它的查詢效率相差的並沒有想象中的大,幾乎可以忽略不記 隻有key_len有些差別。
key_len:表示索引中使用的字節數,可通過該列計算查詢中使用的索引的長度,在不損失精確性的情況下,長度越短越好
。key_len顯示的值為索引字段的最大可能長度,並非實際使用長度,即key_len是根據表定義計算而得,不是通過表內檢索出的。
到此這篇關於淺析MySQL 主鍵使用數字還是uuid查詢快的文章就介紹到這瞭,更多相關mysql主鍵用數字還是uuid內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!