淺析MySQL 主鍵使用數(shù)字還是uuid查詢快
在實(shí)際開(kāi)發(fā)中mysql的主鍵不能重復(fù),可能會(huì)采用主鍵自增,為了防止主鍵重復(fù)也可能會(huì)采取雪花算法之類的算法保證,這兩種主鍵保存的都是number類型 但是實(shí)際開(kāi)發(fā)中可能會(huì)生成uuid作為主鍵那么疑問(wèn)來(lái)了,到底哪種主鍵的效率高呢?
下面由測(cè)試來(lái)驗(yàn)證:
1.首先我們先創(chuàng)建一個(gè)表,用存儲(chǔ)過(guò)程生成100w條數(shù)據(jù)然后分析:
創(chuàng)建表:
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;
創(chuàng)建存儲(chǔ)過(guò)程:
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;
生成數(shù)據(jù):
CALL my_insert();
第一種方式采用的主鍵是number類型的
下圖是采用explain分析得出
2.接下來(lái)繼續(xù)創(chuàng)建另一張表并生成數(shù)據(jù)
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類型的
創(chuàng)建存儲(chǔ)過(guò)程并生成數(shù)據(jù):
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();
下圖是第二種用主鍵查詢的結(jié)果
如果有小伙伴對(duì)explain不太明白的可以去看看博客 https://blog.csdn.net/why15732625998/article/details/80388236
前后分析得出 使用uuid或者數(shù)字作為主鍵它的查詢效率相差的并沒(méi)有想象中的大,幾乎可以忽略不記 只有key_len有些差別。
key_len:表示索引中使用的字節(jié)數(shù),可通過(guò)該列計(jì)算查詢中使用的索引的長(zhǎng)度,在不損失精確性的情況下,長(zhǎng)度越短越好
。key_len顯示的值為索引字段的最大可能長(zhǎng)度,并非實(shí)際使用長(zhǎng)度,即key_len是根據(jù)表定義計(jì)算而得,不是通過(guò)表內(nèi)檢索出的。
到此這篇關(guān)于淺析MySQL 主鍵使用數(shù)字還是uuid查詢快的文章就介紹到這了,更多相關(guān)mysql主鍵用數(shù)字還是uuid內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
圖文詳解Mysql中如何查看Sql語(yǔ)句的執(zhí)行時(shí)間
寫(xiě)程序的人往往需要分析所寫(xiě)的SQL語(yǔ)句是否已經(jīng)優(yōu)化過(guò)了,服務(wù)器的響應(yīng)時(shí)間有多快,所以下面這篇文章主要給大家介紹了關(guān)于Mysql中如何查看Sql語(yǔ)句的執(zhí)行時(shí)間的相關(guān)資料,需要的朋友可以參考下2021-12-12mysql使用left?join連接出現(xiàn)重復(fù)問(wèn)題的記錄
這篇文章主要介紹了mysql使用left?join連接出現(xiàn)重復(fù)問(wèn)題的記錄,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03mysql 存儲(chǔ)過(guò)程判斷重復(fù)的不插入數(shù)據(jù)
這篇文章主要介紹了下面是一個(gè)較常見(jiàn)的場(chǎng)景,判斷表中某列是否存在某值,如果存在執(zhí)行某操作,需要的朋友可以參考下2017-01-01MySQL數(shù)據(jù)庫(kù)事務(wù)隔離級(jí)別介紹(Transaction Isolation Level)
這篇文章主要介紹了MySQL數(shù)據(jù)庫(kù)事務(wù)隔離級(jí)別(Transaction Isolation Level) ,需要的朋友可以參考下2014-05-05mysql?explain中key_len的含義以及計(jì)算方法
通常在優(yōu)化SQL查詢的時(shí)候,我們都會(huì)使用explain分析SQL執(zhí)行計(jì)劃,下面這篇文章主要給大家介紹了關(guān)于mysql?explain中key_len的含義以及計(jì)算方法的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-03-03

用SQL語(yǔ)句解決mysql導(dǎo)入大數(shù)據(jù)文件的問(wèn)題