我有个疑问。我需要在两个表之间进行左连接,并且只得到第一个结果(我的意思是表A上的第一个记录与表B上的任何记录都不匹配)。这是一个例子
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:
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:
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是主键也是如此。
提前谢谢。
发布于 2011-03-14 06:52:14
你不能依赖查询B。Mysql只是返回了它发现的更快的返回。
发布于 2011-03-14 06:43:03
表"b“的"id_name”列上是否有索引?如果没有,那么创建它并告诉我们你得到了什么(我的意思是有多快)你正在寻找不匹配的行并不重要,连接必须在它可以测试是否匹配之前进行。
https://stackoverflow.com/questions/5292895
复制相似问题