次のようなクエリがあります。
SELECT product.id FROM products
INNER JOIN supplier ON supplier.id = product.supplier_id
WHERE supplier.country = 'UK'
AND (
(1000 BETWEEN product.date_on AND product.date_off) OR
(2000 BETWEEN product.date_on AND product.date_off) OR
(2000 >= product.date_on AND
(product.date_off IS NULL OR 1000 <= product.date_off))
)
そのクエリの実行は遅すぎます。いくつかのインデックスが必要だと思いますが、何を追加すればよいかわかりません。product.date_on と product.date_off にインデックスがありますが、AND 句でこれらの値を複数回比較しているため、インデックスが使用されていないと思います。複合インデックスを使用できるかもしれませんが、これを最適化するために、どのフィールドをどの順序で入れるべきかわかりません。ところで、1000 と 2000 は、私が渡している 2 つの変数です...