中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

多用戶商城系統(tǒng)網(wǎng)站建設(shè)上海seo顧問

多用戶商城系統(tǒng)網(wǎng)站建設(shè),上海seo顧問,網(wǎng)絡(luò)廣告策劃內(nèi)容,電商網(wǎng)站開發(fā)的背景及意義UUID(Universally Unique IDentifier 通用唯一標(biāo)識符),是一種常用的唯一標(biāo)識符,在MySQL中,可以利用函數(shù)uuid()來生產(chǎn)UUID。因為UUID可以唯一標(biāo)識記錄,因此有些場景可能會用來作為表的主鍵,但直接…

UUID(Universally Unique IDentifier 通用唯一標(biāo)識符),是一種常用的唯一標(biāo)識符,在MySQL中,可以利用函數(shù)uuid()來生產(chǎn)UUID。因為UUID可以唯一標(biāo)識記錄,因此有些場景可能會用來作為表的主鍵,但直接用UUID來作為主鍵可能存在性能缺陷,我們需要采取一些優(yōu)化手段。

目錄

一、UUID主鍵的缺陷

二、優(yōu)化方案


一、UUID主鍵的缺陷

在MySQL中,innodb是按照表的聚簇索引(主鍵)來組織數(shù)據(jù)存儲的,也就是主鍵的順序決定了數(shù)據(jù)存儲的順序。這也是為什么我們通常推薦用整型,自增的數(shù)字來作為表的主鍵,當(dāng)新數(shù)據(jù)插入時,主鍵一定是最大的,只要放在葉子層中最后的數(shù)據(jù)頁即可,對已有的數(shù)據(jù)不會有影響。

而如果用UUID來做主鍵,則會有2個缺陷:

  • UUID的值是隨機(jī)的,因此新插入的數(shù)據(jù)有可能會插到已有數(shù)據(jù)的中間,這會導(dǎo)致整個索引樹的重新平衡和節(jié)點(diǎn)分裂,降低插入性能,數(shù)據(jù)量越大越嚴(yán)重。
  • UUID是字符型,相對數(shù)字占用的存儲空間很大,這意味著主鍵很大,而主鍵又會附加到所有的二級索引中,因此所有的索引都很臃腫,消耗額外的磁盤和內(nèi)存資源,降低查詢性能。

UUID的生成方式有很多版本,這里舉2個最常用的:

  • UUID V1: 通過時間戳和MAC地址來生成,可以生成順序的UUID。
  • UUID V4: 通過隨機(jī)數(shù)來生成,無法生成順序的UUID。

MySQL自帶的函數(shù)uuid()是通過UUIDv1生成,因此上面第一個缺陷通常不存在,你需要注意的是某些應(yīng)用是否會自己生成非順序的UUID插入表中。

下面通過示例來看差別,我們創(chuàng)建兩張結(jié)構(gòu)一樣的表,一張用數(shù)字作為主鍵,一張用UUID作為主鍵:

create table digital_pk(
id int auto_increment primary key,
serial int);create table uuid_pk(
id varchar(36) default(uuid()) primary key,
serial int);

我們分別向2張表中插入5條數(shù)據(jù):

insert into digital_pk(serial) values(1);
insert into digital_pk(serial) values(2);
insert into digital_pk(serial) values(3);
insert into digital_pk(serial) values(4);
insert into digital_pk(serial) values(5);

insert into uuid_pk(serial) values(1);
insert into uuid_pk(serial) values(2);
insert into uuid_pk(serial) values(3);
insert into uuid_pk(serial) values(4);
insert into uuid_pk(serial) values(5);

我們通過explain來查看索引的信息:

  • explain select * from digital_pk where id=1\G

explain select * from uuid_pk where id='71b49d70-7f98-11ee-a9a1-0050569c9844'\G

可以看到uuid作為主鍵的長度是146,而數(shù)字做主鍵的長度為4,這意味著當(dāng)數(shù)據(jù)量非常大的時候,UUID的索引會非常臃腫,查詢性能會很低。

二、優(yōu)化方案

雖然通常不推薦使用UUID作為表的主鍵,但某些場景如果我們必須要用UUID作為主鍵,我們也可以通過一些方法來規(guī)避上述缺陷。

MySQL為了優(yōu)化UUID的存儲,專門提供了兩個函數(shù):

  • uuid_to_bin(uuid, swap_flag),將字符型UUID轉(zhuǎn)換為二進(jìn)制UUID,轉(zhuǎn)換后返回的數(shù)據(jù)類型是varbinary。
  • bin_to_uuid(uuid, swap_flag),將二進(jìn)制UUID轉(zhuǎn)換為字符型UUID

在存儲的時候用uuid_to_bin(uuid, swap_flag)將UUID由字符型轉(zhuǎn)化為二進(jìn)制,可以大大縮小索引的長度,函數(shù)中的swap_flag有2個取值:

  • 0 代表轉(zhuǎn)換后的數(shù)據(jù)依然是和UUID字符排序相同
  • 1 代表轉(zhuǎn)換后將UUID中的time-low和time-high部分(第一和第三組)交換位置,轉(zhuǎn)換后數(shù)據(jù)可以按時間連續(xù)遞增,對InnoDB的聚簇索引還會有性能提升。注意這個僅對UUID V1版本基于時間戳生成的UUID才有效,如果是其他類型的UUID,不會得到性能提升。

下面我們利用這個函數(shù)新建一個表uuid_pk_v2:

create table uuid_pk_v2(
id binary(16) default(uuid_to_bin(uuid(),1)) primary key,
serial int);

  • 這里id列的數(shù)據(jù)類型變成了binary(16),同時uuid在存儲時轉(zhuǎn)換為二進(jìn)制型存儲。

插入1條數(shù)據(jù)

  • insert into uuid_pk_v2(serial) values(1);

select id, serial from uuid_pk_v2;
select bin_to_uuid(id,1), serial from uuid_pk_v2;

  • 直接查詢是以16進(jìn)制顯示的數(shù)據(jù),這對我們沒有意義,我們需要用bin_to_uuid()函數(shù)將數(shù)據(jù)還原為字符串型UUID。

我們再看一下索引:

explain select * from uuid_pk_v2 where id=uuid_to_bin('a292725f-7fa1-11ee-a9a1-0050569c9844',1)\G

  • 索引的長度從164縮短為16,只有原來的十分之一,這代表索引在磁盤和內(nèi)存占用的空間也會縮小至十分之一,掃描速度會快的多。
  • 因此,雖然在插入和查詢的時候多了一層函數(shù)的處理,但是這可以完美解決前面UUID的兩個缺陷,帶來的性能提升是完全值得的。

http://www.risenshineclean.com/news/7999.html

相關(guān)文章:

  • 無錫哪家做網(wǎng)站好seo搜索引擎優(yōu)化課后答案
  • 長沙從寒網(wǎng)絡(luò)科技有限公司網(wǎng)站推廣與優(yōu)化平臺
  • 企業(yè)網(wǎng)站中( )是第一位的?;葜莅俣萻eo哪家好
  • 如何快速找到做網(wǎng)站的客戶站長素材網(wǎng)
  • 用wordpress做外貿(mào)網(wǎng)站b站推廣網(wǎng)站2024年
  • 企業(yè)對電子商務(wù)網(wǎng)站的建設(shè)網(wǎng)頁設(shè)計制作網(wǎng)站代碼
  • 做動圖的網(wǎng)站在哪里推廣自己的產(chǎn)品
  • 網(wǎng)站搭建素材百度總部電話
  • 網(wǎng)站建設(shè)叫什么軟件網(wǎng)絡(luò)營銷方式有哪些
  • 境外公司在國內(nèi)建網(wǎng)站黑馬it培訓(xùn)班出來現(xiàn)狀
  • 音樂網(wǎng)站開發(fā)畢業(yè)論文創(chuàng)建網(wǎng)站需要多少資金
  • 網(wǎng)站建設(shè)初步認(rèn)識的實訓(xùn)體會行業(yè)網(wǎng)站有哪些平臺
  • 中山制作網(wǎng)站的公司西安網(wǎng)站推廣慧創(chuàng)科技
  • 互聯(lián)網(wǎng)下的網(wǎng)絡(luò)營銷前端seo是什么意思
  • 網(wǎng)站建設(shè)營銷方案整站外包優(yōu)化公司
  • 泉州北京網(wǎng)站建設(shè)如何制作app軟件
  • phpcms學(xué)校網(wǎng)站模板如何制作微信小程序店鋪
  • wordpress 社交分享肇慶seo排名外包
  • 網(wǎng)站倒計時代碼資源企業(yè)網(wǎng)站排名優(yōu)化價格
  • html制作網(wǎng)站的步驟網(wǎng)絡(luò)服務(wù)包括
  • 企業(yè)域名是什么網(wǎng)站seo關(guān)鍵詞設(shè)置
  • 網(wǎng)站設(shè)計營銷網(wǎng)站出租三級域名費(fèi)用
  • 做視頻網(wǎng)站視頻的軟件企業(yè)營銷培訓(xùn)課程
  • 女性時尚網(wǎng)站源碼客戶關(guān)系管理
  • 有沒有免費(fèi)的微網(wǎng)站視頻營銷模式有哪些
  • 昭通網(wǎng)站建設(shè)如何提高網(wǎng)站排名的方法
  • 二手站網(wǎng)站怎做優(yōu)化課程體系
  • 招聘 負(fù)責(zé)網(wǎng)站開發(fā)網(wǎng)絡(luò)營銷有什么方式
  • 網(wǎng)站做cdn百度網(wǎng)頁版入口
  • 網(wǎng)站信息發(fā)布制度建設(shè)seo網(wǎng)站優(yōu)化排名