本文转载自微信公众号“菜鸟阿度”,作者菜鸟阿度。转载本文请联系菜鸟阿度公众号。在web开发中,使用recordid获取详细信息是比较频繁的操作,所以查询速度必须要快。这时候很多小伙伴就会想到使用索引,给id字段加索引。等一下!!!让阿卜杜告诉你我为什么阻止你。在阿里Java开发手册(嵩山版)中明确规定数据库表必须有主键id。当然,后续的操作也必须按照大厂的规范进行。毕竟,阿杜也有一颗大厂之心。关注公众号,回复:开发手册,即可获取阿里Java开发手册(嵩山版)。空话总是不如实际操作有说服力的,那我们就开始操作吧。开始执行,首先创建一个测试表,主键id[user:withprimarykeyid]CREATETABLE`user`(`id`intNOTNULL,`name`varchar(255)NULL,PRIMARYKEY(`id`));不小心运行命令showindexFROMuser查询索引,结果图片列字段说明Table:表名Non_unique:如果索引不能包含重复的词,则为0,否则为1key_name:索引的名称seq_in_index:索引的序号索引的列,从1开始Column_name:列名啥的,结果还是跑不知道什么时候新建的user表已经为字段id建立了索引。原来数据库默认会为主键字段创建索引【主键索引】。现在我知道为什么了。刚才是不是阻止了那些想给id建立索引的朋友?为了凑字数,顺便研究一下,如果表有多个主键,数据库会不会为每个主键创建一个索引,老套路,先建张表【用户:二主键id,name]CREATETABLE`user`(`id`intNOTNULL,`name`varchar(255)NOTNULL,PRIMARYKEY(`id`,`name`));运行命令查看索引showindexFROMuserdatabaseisIndexeshavebeencreatedforbothidandname.现在终于明白为什么阿里的规范要求创建主键id了。不去了,体验一波id加索引的效果。创建一个带有主键id的用户表。CREATETABLE`user`(`id`intNOTNULL,`name`varchar(255)NULL,PRIMARYKEY(`id`));创建一个存储过程生成100万个假数据VALUEs(FLOOR(RAND()*1000))seti=i+1;ENDWHILE;ENDcalladd_vote_memory1(1000000)insertintuserselectid,concat('菜鸟阿杜',id))fromtmp_series调用存储过程calladd_vote_memory(1000000)生成了100万条假数据,在本地数据库执行这个存储过程用了整整10分钟。select*fromuserwhereid=27查询时间:0.021sselect*fromuserwherename='adu'查询时间:0.890s根据主键id查询相比其他字段查询快45倍所以朋友们,在设计数据库表的时候以后记得加上主键id。
