阿里規範中為什麼要求表必須有主鍵id
在web開發中,使用記錄id獲得詳情資訊是一個比較頻繁的操作,所有必須具有很高的查詢速度,這時,很多小夥伴就會想到使用索引,在id欄位上新增索引。且慢!!! 接下來讓阿都告訴你,為什麼攔著你了。
在阿里java開發手冊(嵩山版)明確規定資料庫表必備主鍵id,當然接下來的操作也必須按照大廠的規範來,畢竟阿都也有一個大廠的心。關注微信公眾號【菜鳥阿都】,並回復:開發手冊,可獲得阿里java開發手冊(嵩山版)。
阿都先建立一個具有主鍵id的測試表【user:具有主鍵id】
CREATE TABLE `user` ( `id` int NOT NULL, `name` varchar(255) NULL, PRIMARY KEY (`id`) );
一不小心運行了查詢索引的命令
show index FROM user
圖片列欄位說明
Table:表名稱
Non_unique:如果索引不能包括重複詞,則為0,反則為1
Key_name:索引的名稱
Seq_in_index:索引的列序列號,從1開始
Column_name:列名稱
尷尬了,竟然還執行出了結果,不知道什麼時候這張新建的user表中已經為欄位id建立了索引,原來,資料庫會預設為主鍵欄位建立索引【主鍵索引】,現在知道為什麼阿都剛才攔著那些想給id建立索引的小夥伴了吧
為了湊字數,順便研究一下,如果表中具有多個主鍵,資料庫會不會為每個主鍵都建立索引,老套路,先建它一張表【user:兩個主鍵id,name】
CREATE TABLE `user` (
`id` int NOT NULL,
`name` varchar(255) NOT NULL,
PRIMARY KEY (`id`, `name`)
);
執行命令檢視索引
show index FROM user
資料庫為id和name都建立了索引
現在終於有點明白阿里規範中為什麼要求建立主鍵id了,老鐵,別走,順便體驗一波id帶了索引的效果
建立具有主鍵id的user表
CREATE TABLE `user` ( `id` int NOT NULL, `name` varchar(255) NULL, PRIMARY KEY (`id`) );
建立儲存過程生成100萬條假資料
CREATE PROCEDURE `add_vote_memory1`(IN n int)
BEGIN
DECLARE i INT DEFAULT 1;
WHILE (i <= n ) DO
INSERT into user (name) VALUEs (FLOOR(RAND() * 1000))
set i=i+1;
END WHILE;
END
call add_vote_memory1(1000000)insert into user select id,concat('菜鳥阿都',id)) from tmp_series
呼叫儲存過程
call add_vote_memory(1000000)
生成了100萬條假資料,在本地資料庫執行這個儲存過程足足花費了10分鐘
select * from user where id=27
查詢時間:0.021s
select * from user where name='adu'
查詢時間:0.890s
根據主鍵id查詢與其他欄位查詢相比快了45倍,所以小夥伴們,以後設計資料庫表時,記得加主鍵id。一定要記得。
關注微信公眾號【菜鳥阿都】,並回復:開發手冊,可獲得阿里java開發手冊(嵩山版)