2017-08-17 13 views
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以外はどうすれば修正できますか?

+0

レコードが一致しない可能性があるため、クエリはテーブル全体をスキャンします。 – Matt

+0

インデックスの対象範囲を確認してください。 'EXPLAIN'をチェックしてください。 – tadman

答えて

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)に索引を作成します。

関連する問題