MySQLjoin连表查询索引问题

更新时间:2023-06-22 21:50:05 阅读: 评论:0

MySQLjoin连表查询索引问题
⾸先先创建两个临时表,并加⼀条基础数据进去
create table ur
(
id              int auto_increment comment '⾃增主键'primary key,
name            varchar(30) null comment '⽤户名称',
create_time    datetime not null  comment '注册时间',
last_login_time datetime null  comment '最后登录时间'
花仙子的故事
)  comment '测试表';
create table article
(
id          int auto_increment  comment '⾃增主键'primary key,
ur_id int not null  comment '⽤户id',
name        varchar(30)  null  comment '帖⼦名称',
topic      varchar(30)  null  comment '帖⼦关键词',
content    varchar(500) null  comment '帖⼦内容',
create_time datetime not null  comment '创建时间'
)  comment '测试表2';*/inrt into article values(1,1, 'name_1', 'topic_1', 'content_1', '2019-01-01 00:00:00');
sunshine是什么意思inrt into ur values(1,'ur_1', '2019-01-01 00:00:00', '2019-03-01 12:00:00');
为了能模拟⼤查询的情况,给每个表插⼊⼀些数据,ur要有万级数据量,article要有百万级数据量,下⾯的sql每执⾏⼀次,数据量翻倍,谨慎执⾏!
t@i=1;
t@time=1;
inrt into ur(name, create_time, last_login_time)
担字组词lect
concat('ur_',@i:=@i+1),
date_add(create_time,interval +@time*cast(rand()*100as signed) SECOND),
null
from ur;
lect count(1) from ur;
t@i=1;
t@time=1;
inrt into article(ur_id, name, topic, content, create_time)
lect
round(rand()*(lect max(id) from ur)),
concat('name_',@i:=@i+1),
concat('topic_',@i:=@i+1),
concat('content_',@i:=@i+1),
date_add(create_time,interval +@time*cast(rand()*100as signed) SECOND)天枰座男生
from article;
lect count(1) from article;
看下查询的SQL语句
lect sql_no_cache  *from ur left join article on(ur.id = article.ur_id)
不是这样的where ur.name like'ur_4%';
没有使⽤缓存,ur表的id是主键,article表除主键外没有任何索引,这种情况下,百万级数据查询情况如下
sql>lect sql_no_cache  *from ur left join article on(ur.id = article.ur_id)
where ur.name like'ur_4%'
[2020-05-17 13:24:45]500 rows retrieved starting from1in4 s 681 ms (execution: 1 s 312 ms, fetching: 3 s 369 ms)
给article表加个索引
CREATE INDEX ur_id ON article (ur_id);
raw格式
再执⾏⼀下看下效果
sql>lect sql_no_cache  *from ur left join article on(ur.id = article.ur_id)
韭菜的种植where ur.name like'ur_4%'
[2020-05-17 13:27:22]500 rows retrieved starting from1in142 ms (execution: 112 ms, fetching: 30 ms)
可以看出,加了索引后,时间缩短了97%
结论:
A表与B表使⽤Join联合查询的时候,针对on⾥⾯的字段加与不加索引的效率(假设on的条件是A.id=B.aid):
1、两个字段都不加索引,效率极低
2、A表的字段加了索引,B表的字段没有加索引,效果同上
老公的生日祝福语怎么写
3、A表B表的字段都加了索引,效果很明显
4、A表不加索引,B表加了索引,效果同上
参考:

本文发布于:2023-06-22 21:50:05,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/1016352.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:查询   时间   没有   数据
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图