1. ホーム
  2. sql

[解決済み] SQLではwhere句の順番は重要か?

2022-05-10 14:13:29

質問

というテーブルがあるとします。 PEOPLE は3つのカラムを持つ。 ID , および 名(ファーストネーム . これらのカラムはどれもインデックスされていません。 姓(LastName はよりユニークであり 名(ファーストネーム は一意性が低い。

2回検索をかけると

select * from PEOPLE where FirstName="F" and LastName="L"
select * from PEOPLE where LastName="L" and FirstName="F"

私の考えでは、2番目の方が速いのは、よりユニークな基準( LastName の中で最初に来る。 where という節があり、レコードがより効率的に消去されます。オプティマイザが最初のSQLクエリを最適化するほど賢いとは思えません。

私の理解は正しいのでしょうか?

どのように解決するのですか?

いいえ、その順番は重要ではありません(少なくとも、重要ではないはずです)。

まともなクエリオプティマイザは すべて の部分は WHERE 節を作成し、そのクエリを満たすための最も効率的な方法を見つけ出すことができます。

SQL Server のクエリオプティマイザは、2つの条件の順番に関係なく、適切なインデックスを選択しますよね。他のRDBMSも同様の戦略を持っていると思われます。

重要なのは、これに適したインデックスがあるかどうかということです

SQL Serverの場合、インデックスがあればそれを使用する可能性が高いです。

  • に対するインデックス (LastName, FirstName)
  • のインデックス (FirstName, LastName)
  • のみを対象としたインデックスです。 (LastName) または (FirstName) (またはその両方)

一方、これもSQL Serverの場合ですが、もしあなたが SELECT * を取得するために すべて カラムを取得するために完全なデータページをルックアップする必要があるため、クエリオプティマイザはインデックスを使用せずにテーブル(またはクラスタ化インデックス)スキャンを行う可能性が高くなります。 すべて 他のカラムのコストが高くなりすぎるからです。)