MYSQLの質問です。

WHERE句の順番で、抽出速度は変わるのでしょうか。

例えば次のようなSQLです。
結果は同じになるのですが、条件の順番を変えています。

(1)のほうが抽出速度が早いような気がしているのですが、
MYSQLではどうでしょう。


(1)絞り込める条件を先に
SELECT *
FROM 顧客データ
WHERE
住所="北海道" AND 性別="男"

(2)絞り込める条件を後に
SELECT *
FROM 顧客データ
WHERE
性別="男" AND 住所="東京"

回答の条件
  • 1人5回まで
  • 登録:2009/01/31 15:36:57
  • 終了:2009/02/05 13:19:40

ベストアンサー

id:bigvan No.3

bigvan回答回数12ベストアンサー獲得回数12009/02/01 14:59:49

ポイント100pt

結論から言いますとどちらも結果は同じです。

MySQLのクエリオプティマイザは自動的に実行前にクエリの構文解析を行い最も効率的なクエリの実行方法を見つけ出します。

・適切なインデックス候補が存在するか

・どのインデックスが最適であるか

・どのテーブルが関係するのか

・エイリアスを使用するのか

・複数テーブルの場合どの結合順序が適切か

・どの検索順序が適切か

ですから結果は同じになるのです。

id:webuser

ありがとうございます。

根拠まで書いて頂けたのでどても参考になります。

2009/02/02 07:50:13

その他の回答(2件)

id:hijk05 No.1

hijk05回答回数1307ベストアンサー獲得回数232009/01/31 19:44:11

ポイント1pt

(2)の方が、どんなデータベースでも早いです。

id:webuser

ありがとうございます。

理由を書いて頂けると助かります。

2009/02/02 07:51:27
id:deep_one No.2

deep_one回答回数79ベストアンサー獲得回数62009/02/01 07:55:14

ポイント10pt

インデックスの付き方で変わってくるかもしれませんが、1の方が早いと思います。

スピードにこだわる必要があるときには、住所のカラムにインデックスが設定されていることを確かめてください。

id:webuser

ありがとうございます。

2009/02/02 07:49:33
id:bigvan No.3

bigvan回答回数12ベストアンサー獲得回数12009/02/01 14:59:49ここでベストアンサー

ポイント100pt

結論から言いますとどちらも結果は同じです。

MySQLのクエリオプティマイザは自動的に実行前にクエリの構文解析を行い最も効率的なクエリの実行方法を見つけ出します。

・適切なインデックス候補が存在するか

・どのインデックスが最適であるか

・どのテーブルが関係するのか

・エイリアスを使用するのか

・複数テーブルの場合どの結合順序が適切か

・どの検索順序が適切か

ですから結果は同じになるのです。

id:webuser

ありがとうございます。

根拠まで書いて頂けたのでどても参考になります。

2009/02/02 07:50:13
  • id:deep_one
    オプティマイザが自動で走るのか・・・そんなところは考慮していなかったな(笑)
    まあ常にオプティマイザがいい答えを出してくれるとは限らないので、気をつけておいた方が有利ですけど。
  • id:webuser
    他の回答はこれ以上なさそうなので、ここで〆ます。
    根拠まで書いてくださったbigvanさんの回答をイルカ賞とさせてもらいますね。

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません