• 阿里规范中为什么要求表必须有主键id


    此文转载自:https://blog.csdn.net/douzhenwen/article/details/113658686#commentBox

           在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开发手册(嵩山版)

       

    更多内容详见微信公众号:Python测试和开发

    Python测试和开发

  • 相关阅读:
    arrayObj.splice(start, deleteCount, [item1[, item2[, . . . [,itemN]]]])
    运算符 ||
    ajax 本地测试,使用Chrome 浏览器
    js set
    js get 传参 汉字 乱码问题
    删除对象中的key
    html 返回页面顶部
    js 设置回车事件
    盘面,盘口
    ST股
  • 原文地址:https://www.cnblogs.com/phyger/p/14377802.html
Copyright © 2020-2023  润新知