「explain」コマンドを使用して MySQL でクエリを調べると、奇妙な状況が発生します。列 "Period"、"X"、および "Y" に 3 つの一意でない単一列インデックスを持つテーブルがあります。これら 3 つの列はすべて、同じ整数データ型を持ちます。次に、次のコマンドを調べます。
EXPLAIN SELECT * FROM MyTable WHERE Period = 201208 AND X >= 0 AND Y <= 454;
EXPLAIN SELECT * FROM MyTable WHERE Period = 201304 AND X >= 0 AND Y <= 454;
1つ目は「インデックス条件を使用; whereを使用」と表示されていますが、2つ目は奇妙なことに「whereを使用」しか表示されていないため、パラメーターを1つ変更すると、クエリ実行でインデックスが削除されるようです。
テーブルには合計約 65000 行、Period 値ごとに約 5000 行あり (バランスがとれています)、最初のクエリは約 2000 行を返し、2 番目のクエリは約 500 行を返します。また、後者の期間値 (201304) は「最後の"物理的にテーブルにあり、前者の値も最初ではないため、期間の値がこの 2 つよりも小さい行と大きい行が多数あります。
元のテーブルは列が多く非常に複雑なので、ここに貼り付けることができません。しかし、インデックスはこの 3 つだけで、クエリはテスト中に使用したものと同じなので、あまり問題にならないことを願っています。
誰かがこれを引き起こす可能性のあるヒントと、私が知らないことを処理する必要があるかどうかを教えてもらえますか? ありがとうございました。