全表スキャン
最初の例は、fruitsテーブル内の色が赤のすべての果物の名前を返すSQLステートメントを示している。fruitsテーブルに色列のインデックスがない場合、データベースエンジンは、各行の色を「赤」と比較するために、fruits内のすべての行をロードして調べる必要がある。
2番目の例は、fruitsテーブル内のすべてのfruitの名前を返すSQLステートメントを示している。このステートメントには抽出条件がないため(WHERE句なし)、すべての行のデータを取得することになる。そのため、データベースエンジンは、fruitsテーブルの名前列にインデックスがある場合でも、全表スキャンを使用してこのクエリのデータを取得する。この場合は、インデックスによる抽象化レイヤーを介してテーブルにアクセスするよりも高速になる。
3番目の例は、SQLエンジンが全表スキャンの代わりにほぼ確実にインデックスを使用する選択をする反例である。この例では、前のクエリとほぼ同じクエリを使用しているが、返される名前がアルファベット順になるようにORDER BY句を追加している。fruitsテーブルの名前列にインデックスがあるとすると、データベースエンジンはそのインデックスを使用して名前を順番に返す。これは、インデックスの追加の抽象化レイヤーを介してテーブルにアクセスすると、要求された順序で行を返すという利点があるためである 。エンジンが全表スキャンを使用して行をロードした場合、返された行を並べ替える追加の作業を実行する必要がある。極端な場合(データベースエンジンによって維持される統計がテーブルに含まれる行数が非常に少ないことを示している場合など)、オプティマイザはこのタイプのクエリに全表スキャンを使用する場合がある。