鍍金池/ 問(wèn)答/數(shù)據(jù)庫(kù)/ 如何優(yōu)化使用GUID作為id的MySQL數(shù)據(jù)庫(kù)操作?

如何優(yōu)化使用GUID作為id的MySQL數(shù)據(jù)庫(kù)操作?

我們之前的系統(tǒng)使用的都是自增的id,但是因?yàn)榘踩拖到y(tǒng)設(shè)計(jì)原因,現(xiàn)在都改成了使用guid。這時(shí)我們發(fā)現(xiàn),每次CRUD操作,比如update xxx from table_a where guid='asdhkjasfdjasgf12312uykjsadjashd'時(shí),都會(huì)掃描全部記錄。(目前我們表內(nèi)有5W條數(shù)據(jù),基本每次query都是掃描5W條數(shù)據(jù))

請(qǐng)問(wèn),我們?cè)撊绾芜M(jìn)行優(yōu)化?
多謝

回答
編輯回答
帥到炸

guid字段添加普通索引

這是我測(cè)試數(shù)據(jù):

加索引id執(zhí)行計(jì)劃:

explain SELECT * FROM qxd.qxd_community where id = '540a1cb9-04cc-ce17-9933-81bb115328bb'
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE qxd_community ref id id 108 const 1 Using index condition

未加索引id執(zhí)行計(jì)劃:

clipboard.png

2018年8月11日 19:09
編輯回答
柚稚

guid一定是唯一鍵,如果原來(lái)的id還用的話(huà),guid設(shè)成unique key, 否則設(shè)成primary key更好。

alter table table_a add unique key(guid);
2018年8月23日 16:25
編輯回答
老梗
alter table table_a add index guid_idx(guid(10))

PS: 5w的數(shù)據(jù)量不算大,可以這樣干。 如果量超過(guò)30w級(jí)別就要重新考慮表設(shè)計(jì)了,比如分區(qū)、分表或者其他思路。

2017年9月4日 01:18