人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

MYSQL(というよりSQL文?)で、SELECT や FROM などのコマンドを
大文字で記述すると、処理スピードが上がると聞きました。

以前それをプログラマに教えたところ、SELECTを用いて2万件ほどデータを
検索したときの速度が確かに高速になり、プログラマも、確かに処理があがった!と
cmd 画面を見ながら喜んでました。

多少知識がついてきた今考えてみると、キャッシュとかだったんじゃないかな?と
思っているのですが、実際どうなんですかね?
数万件のデータ数だと違ってくるとか・・・

●質問者: yossui_coll
●カテゴリ:インターネット ウェブ制作
✍キーワード:MySQL SELECT SQL キャッシュ コマンド
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● b-wind
●36ポイント

どの RDBMS でもそうだけど、SQL はあくまでユーザーが使う言語で

それを構文解析して自身の扱いやすいように変換してから実行される。

MySQL :: MySQL 4.1 リファレンスマニュアル :: 5.2 SELECT ステートメントおよびその他のクエリの最適化

場合によってはこの時点で SQL 文のチューニングすら行われる。


だから、メジャーな RDBMS で

大文字で記述すると、処理スピードが上がると聞きました。

ということは処理上非常に考えにくい。


ただ、構文解析処理自体はそれなりにコストのかかる処理なので、

データ数が影響することは無いが、SQL 文の発行回数によっては若干の

違いが出る可能性が無いわけではない。

ただ、100万回クエリを投げて数秒違いが出るとかそういうレベルだと思うけど。


検索したときの速度が確かに高速になり、プログラマも、確かに処理があがった!と

cmd 画面を見ながら喜んでました。

MySQL にはクエリキャッシュという機能があり、同一クエリに対しては即時応答できる。

2回目以降の検索速度が上がったのであればそれは MySQL の仕様。

実際どういう状況でどんなクエリを投げたのかわからないけど。

◎質問者からの返答

ありがとうございます。

状況としては約2万件の会員データの中から、ある条件の会員を検索する

という感じでした。大文字処理で4、5倍の差がでた記憶がありますが、

同じ条件での検索だったので、まさしくキャッシュだったのですね。

プログラマー4人もいたんですけどね。。


2 ● kn1967
●36ポイント

MySQL、PostgreSQL、ORACLE、Accessなどは

テーブルやインデックスなどの現状を表す統計情報を保持していて

オプティマイザと呼ばれるプログラムが「SQL文」と「統計情報」をもとに

「どうすれば短時間で処理できるか?」の解析を行い

解析の結果、一番短時間であると考えられる方法にあわせて

「SQL文」を「内部実行形式」に変換し、実行プログラムに引き継ぎます。


内部実行形式に変換された後ならばSQLコマンドの大文字小文字は既に関係の無い話ですし

SQLの予約語が大文字だから小文字だからといった事くらいで

オプティマイザでの解析に大幅な違いが現れるとは考えられず

お考えのようにキャッシュ的なものが有効に使えた可能性は高いものと推測します。


SQLの予約語は慣例的に大文字で書く事が多く、それに慣れている人も多いので

統一という意味で大文字をお勧めしたいです。

◎質問者からの返答

ありがとうございます。

僕はあまりSQLで何かするような機会はないのですが、

HTMLやCSSなども記述ルールを統一すると効率が上がりやすいように、

SQL文も予約語が大文字であれば、見た目的にもわかりやすくなりますしね。

勉強になりました。


3 ● techmedia-think
●35ポイント

MySQLには当てはまらないかもしれませんが、Oracleの場合は、基本的にSQLは大文字で管理されるため、小文字でSQLを記載していても、Oracleにより小文字→大文字の変換をします。そのため、最初から大文字で記載していれば余計な変換が発生しないので、パフォーマンスは向上します。

◎質問者からの返答

ありがとうございます。

なるほど、Oracleがそういう仕様だったんですね。

今回の件は、実はあるプログラムの学校の講師の方から

聞いていたんですが、勘違いしていたのかもしれません。


4 ● matsu-boolean
●36ポイント

基本的に 「""」 など(MySQLの場合は 「``」)で括られない識別子は大文字(MySQLの場合は小文字)へ変換されます。なので、厳密に言えばはじめから大文字(MySQLの場合は小文字)で書いておけば、変換の負荷は下がります。

…とは言ってもほぼ誤差だと考えてください。今日のCPUで文字列の大文字小文字変換のCPU負荷など高々知れています。昔確認したときに速度が上がったのはご想像通り、キャッシュなどだったのではないでしょうか。

ただし、DBによっては、大文字小文字も含めて一字一句同じSQLが発行された場合は構文解析を省略できるので、プロジェクト内で、大文字なり小文字なり、SQL記述のルールを定めておくと良いかもしれません。あと、条件句を「EMP_CODE='000001'」のように文字列として生成せず、「EMP_CODE=:EMP_CODE」のようにSQLパラメータを使うことで、構文解析を省略できる可能性が高くなります。(これはORACLEの場合ですが他のDBでも事情は似たようなものだと思います)

ご参考になれば幸いです。

◎質問者からの返答

ありがとうございます。

現在のCPUなら特に問題なし、こだわるなら書いていただいた

やり方もあるということですね。

勉強になります。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ