老铁,索引别想乱用

网友投稿 439 2023-04-17

本站部分文章、图片属于网络上可搜索到的公开信息,均用于学习和交流用途,不能代表睿象云的观点、立场或意见。我们接受网民的监督,如发现任何违法内容或侵犯了您的权益,请第一时间联系小编邮箱jiasou666@gmail.com 处理。

老铁,索引别想乱用

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

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

开始表演

阿都先创建一个具有主键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,反则为1Key_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。一定要记得。

上一篇:使用 Ansible 的第一天
下一篇:软件测试包括压力(软件测试包括压力测试嘛)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~