首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql left join、limit和sorting

mysql left join、limit和sorting
EN

Stack Overflow用户
提问于 2011-03-14 06:25:51
回答 2查看 627关注 0票数 0

我有个疑问。我需要在两个表之间进行左连接,并且只得到第一个结果(我的意思是表A上的第一个记录与表B上的任何记录都不匹配)。这是一个例子

代码语言:javascript
复制
create table a (
id int not null auto_increment primary key,
name varchar(50),
surname varchar(50),
prov char(2)
) engine = myisam;

insert into a (name,surname,prov)
values ('aaa','aaa','ss'),('bbb','bbb','ca'),('ccc','ccc','mi'),('ddd','ddd','mi'),('eee','eee','to'),
       ('fff','fff','mi'),('ggg','ggg','ss'),('hhh','hhh','mi'),('jjj','jjj','ss'),('kkk','kkk','to');


create table b (
id int not null auto_increment primary key,
id_name int
) engine = myisam;

insert into b (id_name) values (3),(4),(8),(5),(10),(1);

查询A:

代码语言:javascript
复制
select a.*
from a
left join b
on a.id = b.id_name 
where b.id_name is null and a.prov = 'ss'
order by a.id
limit 1

查询B:

代码语言:javascript
复制
select a.*
from a
left join b
on a.id = b.id_name 
where b.id_name is null and a.prov = 'ss'
limit 1

这两个查询都给出了正确的结果,即记录id = 7。我想知道我是否可以依赖查询B,即使没有指定id排序,或者这只是一个例子,我得到了正确的结果。

我之所以这样问,是因为对于大型记录集(超过1000万行),没有排序的查询会立即给出一条记录,而应用排序则需要20秒以上,即使a.id是主键也是如此。

提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-03-14 06:52:14

你不能依赖查询B。Mysql只是返回了它发现的更快的返回。

票数 1
EN

Stack Overflow用户

发布于 2011-03-14 06:43:03

表"b“的"id_name”列上是否有索引?如果没有,那么创建它并告诉我们你得到了什么(我的意思是有多快)你正在寻找不匹配的行并不重要,连接必须在它可以测试是否匹配之前进行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5292895

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档