0
vehicles
の在庫が1週間で確認されていますが、sold_vehicles
の表にはリストされていません。> = to <=を指定すると、実行期限を超過します。
私はこのクエリを実行する場合:
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
以外はどうすれば修正できますか?
レコードが一致しない可能性があるため、クエリはテーブル全体をスキャンします。 – Matt
インデックスの対象範囲を確認してください。 'EXPLAIN'をチェックしてください。 – tadman