それは真剣に少しでも問題ではありません。1000レコードは本当に小さなデータベーステーブルであり、まったく違いがある場合は、そのような頭の悪いDBMSからアップグレードする必要があります。
適切なDBMSはすでにテーブルから統計を収集しており(またはDBAは定期的な調整の一部として収集しているはずです)、where
句の順序は関係ありません。
実行エンジンは、カーディナリティを減らした(つまり、行の候補グループを減らした)ものを最も速く選択します。つまり、ステートメントclass = 5
の順序に関係なく、(クラスと学校がほぼ均等に分散されていると仮定して)フィルターが最初に発生します。select
カーディナリティの問題をもう少し詳しく説明すると、これらの1000レコードがほぼ均等に分散している場合、各学校で333、各クラスで83になります。
DBMSが行うことは、最初に、最小の結果セットを提供するものでフィルタリングすることです。したがって、クラスフィルターの使用を好む傾向があります。これにより、行の候補リストがすぐに約83に削除されます。次に、2以外の学校があるものを破棄するだけです。
どちらの場合も、最終的に同じ行セットになりますが、インデックスを使用して目的の行のみを選択できるため、初期フィルターの方が高速であることがよくあります。一方、2番目のフィルターは、効率の低い方法でこれらの行を通過する可能性が高いため、行数をすばやく減らすことができれば、より良い結果が得られます。
本当に知りたいのなら、推測するのではなく測定する必要があります。これはDBAの主要な責任の1つであり、クエリを最適に実行するためにデータベースを調整します。