我不是肯定的,但我相信子选择不是最佳的(速度?)。
有没有办法从我的查询中删除这个子选择(我认为查询是不言自明的)。
select *
from tickers
where id = (select max(id) from tickers where annual_score is not null);
答案 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不是我的背景。