2013-04-17 45 views
0

我并不积极,但我相信子选择不是最佳的(速度?)。有没有办法做这个查询没有子选择?

有没有办法从我的查询中删除这个子选择(我认为这个查询是不言自明的)。

select * 
from tickers 
where id = (select max(id) from tickers where annual_score is not null); 
+1

也考虑索引。 'annual_score'索引? 'id'?如果两者都是,那么这可能与你将要获得的速度一样快。 –

回答

5

该特定的子选择应该不是低效的。在主要查询开始之前,应该运行一次

有一类子查询效率不高(主查询和子查询之间的列连接的子查询),因为它们最终会为主查询的每一行运行子查询。

但是,这不应该是其中之一,除非MySQL严重受到脑损伤,这是我的疑问。

然而,如果你仍然渴望摆脱子查询,你可以通过ID行排序(递减),只取第一,是这样的:

select * from tickers 
where annual_score is not null 
order by id desc 
limit 0, 1 
6

会是这样的:

SELECT * FROM ticker WHERE annual_score IS NOT NULL ORDER BY id desc LIMIT 1

工作吗?

1

不太熟悉MySQL的,但如果你想消除子查询,那么你可以尝试这样的事:

select * 
from tickers 
where annual_score is not null 
order by id desc 
limit 1 

我不知道这是不是像MySQL或多或少高性能的不是我背景。

+0

看起来像别人有同样的想法。 –