有没有办法在没有子选择的情况下执行此查询?

时间:2013-04-17 04:07:59

标签: mysql sql optimization

我不是肯定的,但我相信子选择不是最佳的(速度?)。

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

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

3 个答案:

答案 0 :(得分:6)

会是这样的:

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

工作?

答案 1 :(得分:5)

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

有一类 低效的子查询(在主查询和子查询之间连接列的子查询),因为它们最终为主查询的每一行运行子查询。 / p>

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

但是,如果你仍然希望摆脱子查询,你可以按id(降序)排序行,只获取第一行,如:

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

答案 2 :(得分:1)

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

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

我不知道这是否或多或少性能,因为MySQL不是我的背景。