更改> = to< =会导致查询超出执行时间限制

时间:2017-08-17 01:07:37

标签: mysql sql join left-join

我有一个查询,检查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以外的问题?

1 个答案:

答案 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)上创建索引。