我有一个查询,检查vehicles
的库存,这些库存在一周内没有出现,但未在sold_vehicles
表中列出。
如果我运行此查询:
SELECT all_vehicles.Vin
FROM all_vehicles
LEFT JOIN sold_vehicles
ON all_vehicles.Vin = sold_vehicles.Vin
WHERE
sold_vehicles.id IS NULL AND
all_vehicles.last_seen >= 1502672069
ORDER BY all_vehicles.id ASC
LIMIT 1000
一切正常。
但是,如果我将>=
反转为<=
,则超过了120秒的执行时间限制。为什么逆转这种行为会这样?除了大量结果之外的任何其他原因,并没有限制修复?
要清楚,这几乎是完全相同的查询,但<=
和LIMIT 10
仍无法执行:
SELECT all_vehicles.Vin
FROM all_vehicles
LEFT JOIN sold_vehicles
ON all_vehicles.Vin = sold_vehicles.Vin
WHERE
sold_vehicles.id IS NULL AND
all_vehicles.last_seen <= 1502672069
ORDER BY all_vehicles.id ASC
LIMIT 10
有什么想法吗?是单独发现的结果数量?如何解决LIMIT
以外的问题?
答案 0 :(得分:1)
首先删除order by
。这会返回什么吗?
SELECT av.Vin
FROM all_vehicles av LEFT JOIN
sold_vehicles sv
ON av.Vin = sv.Vin
WHERE sv.id IS NULL AND
av.last_seen <= 1502672069
--ORDER BY av.id ASC
LIMIT 10;
然后,我会在all_vehicles(last_seen, Vin, id)
和sold_vehicles(Vin, id)
上创建索引。