[解決済み] SQLではwhere句の順番は重要か?
質問
というテーブルがあるとします。 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 *
を取得するために
すべて
カラムを取得するために完全なデータページをルックアップする必要があるため、クエリオプティマイザはインデックスを使用せずにテーブル(またはクラスタ化インデックス)スキャンを行う可能性が高くなります。
すべて
他のカラムのコストが高くなりすぎるからです。)
関連
-
[解決済み] SQLサーバーでNULL = NULLがfalseに評価される理由
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] MySQLでコマンドラインを使用してSQLファイルをインポートするにはどうすればよいですか?
-
[解決済み] SQL Server の DateTime データ型から日付だけを返す方法
-
[解決済み] SQL JOIN - WHERE句とON句の比較
-
[解決済み] SQL SELECT WHERE フィールドに単語が含まれる場合
-
[解決済み] SQL ServerでGROUP BYを使って文字列を連結する方法とは?
-
[解決済み] T-SQL文の接頭辞Nの意味と使うべきタイミングは?
-
[解決済み】SQLのHAVINGとWHEREはどう違うのですか?
-
[解決済み】SQLで結合順は重要か?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
MySQL - ストアドプロシージャ (データ型、関数)
-
MHAクラスタエラーサマリーの構築
-
[解決済み] PostgreSQLのCREATE DATABASE IF NOT EXISTSをシミュレートしてみませんか?
-
[解決済み] SQLサーバーでNULL = NULLがfalseに評価される理由
-
[解決済み] T-SQLでnot equalには!=と<>のどちらを使うべきですか?
-
[解決済み] SQLiteデータベースで、一度に複数行を挿入することは可能ですか?
-
[解決済み] SQLite - UPSERT *not* INSERT or REPLACE
-
[解決済み] 項目xにアクセスできるように文字列を分割するにはどうすればよいですか?
-
[解決済み] Entity Framework VS LINQ to SQL VS ADO.NETでストアドプロシージャを使う?[クローズド]
-
[解決済み] SQLのWHERE句は短絡的に評価されるか?