老铁,索引别想乱用

运维 数据库运维
在web开发中,使用记录id获得详情信息是一个比较频繁的操作,所有必须具有很高的查询速度,这时,很多小伙伴就会想到使用索引,在id字段上添加索引。且慢!!! 接下来让阿都告诉你,为什么拦着你了。

[[380660]]

 本文转载自微信公众号「菜鸟阿都」,作者菜鸟阿都。转载本文请联系菜鸟阿都公众号。   

在web开发中,使用记录id获得详情信息是一个比较频繁的操作,所有必须具有很高的查询速度,这时,很多小伙伴就会想到使用索引,在id字段上添加索引。且慢!!! 接下来让阿都告诉你,为什么拦着你了。

在阿里java开发手册(嵩山版)明确规定数据库表必备主键id,当然接下来的操作也必须按照大厂的规范来,毕竟阿都也有一个大厂的心。关注公众号,并回复:开发手册,可获得阿里java开发手册(嵩山版)。

 

空洞的言语总是没有实际操作具有说服力,开始操作喽。

开始表演

阿都先创建一个具有主键id的测试表【user:具有主键id】

  1. CREATE TABLE `user`  ( 
  2.   `id` int NOT NULL
  3.   `namevarchar(255) NULL
  4.   PRIMARY KEY (`id`) 
  5. ); 

一不小心运行了查询索引的命令

  1. show index FROM user 

 

结果图片列字段说明

  • Table:表名称
  • Non_unique:如果索引不能包括重复词,则为0,反则为1
  • Key_name:索引的名称
  • Seq_in_index:索引的列序列号,从1开始
  • Column_name:列名称

尴尬了,竟然还运行出了结果,不知道什么时候这张新建的user表中已经为字段id创建了索引,原来,数据库会默认为主键字段创建索引【主键索引】,现在知道为什么阿都刚才拦着那些想给id创建索引的小伙伴了吧

为了凑字数,顺便研究一下,如果表中具有多个主键,数据库会不会为每个主键都创建索引,老套路,先建它一张表【user:两个主键id,name】

  1. CREATE TABLE `user`  ( 
  2.   `id` int NOT NULL
  3.   `namevarchar(255) NOT NULL
  4.   PRIMARY KEY (`id`, `name`) 
  5. ); 

运行命令查看索引

  1. show index FROM user 

 

数据库为id和name都创建了索引

现在终于有点明白阿里规范中为什么要求创建主键id了,老铁,别走,顺便体验一波id带了索引的效果

创建具有主键id的user表

  1. CREATE TABLE `user`  ( 
  2.   `id` int NOT NULL
  3.   `namevarchar(255) NULL
  4.   PRIMARY KEY (`id`) 
  5. ); 

创建储存过程生成100万条假数据

  1. CREATE  PROCEDURE `add_vote_memory1`(IN n int)   
  2. BEGIN     
  3.   DECLARE i INT DEFAULT 1;   
  4.     WHILE (i <= n ) DO   
  5.       INSERT into user  (nameVALUEs (FLOOR(RAND() * 1000)) 
  6.             set i=i+1;   
  7.     END WHILE;   
  8. END   
  9. call add_vote_memory1(1000000)insert into user select id,concat('菜鸟阿都',id)) from tmp_series 

调用储存过程

  1. call add_vote_memory(1000000) 

生成了100万条假数据,在本地数据库执行这个储存过程足足花费了10分钟

  1. select * from user where id=27 

查询时间:0.021s

  1. select * from user where name='adu' 

查询时间:0.890s

根据主键id查询与其他字段查询相比快了45倍,所以小伙伴们,以后设计数据库表时,记得加主键id。一定要记得。

责任编辑:武晓燕 来源: 菜鸟阿都
相关推荐

2010-09-27 11:55:47

SQL索引

2021-10-22 13:38:14

程序员技能开发者

2021-07-06 21:37:05

索引SQL数据

2009-01-04 15:38:07

索引SQL Server数据库

2020-11-17 09:16:28

SD-WAN软件定义网络SDN

2020-02-06 15:20:21

编程语言PythonJava

2020-12-25 06:24:42

微信直播移动应用

2017-07-10 15:30:02

信息化高铁互联网+

2021-04-26 18:38:58

缓存数据DB

2019-12-06 11:22:00

中国电信

2022-12-16 17:09:57

2017-11-10 10:18:42

程序员

2020-08-10 14:39:30

搜索引擎

2020-04-03 08:30:44

RabbitMQKafka软件

2021-02-04 12:39:38

5G运营商网络

2023-07-05 13:34:57

ChatGPTOpenAI生产者

2022-01-07 13:36:00

MySQL数据库分页

2019-09-11 08:12:04

生物识别密码加密

2015-08-27 13:21:15

2019-01-07 15:22:07

自动驾驶高铁ATO
点赞
收藏

51CTO技术栈公众号