2005.12.20

SQL構文、PL/SQLはすべて大文字で記述する

Oracleの場合のみに言えることですが、SQL構文は
すべて大文字で記述したほうがパフォーマンスがよくなります。
理由は、Oracleの内部では英字を大文字で管理しているためです。
小文字で記述しても内部で大文字に変換されるので、
最初から大文字で記述することによって余計な変換処理がなくなり、
パフォーマンスがよくなります。

また、PL/SQLについてもすべて大文字で記述したほうがよいです。
この場合の利点は、コンパイルエラー時のコードの見易さにあります。
SQL構文と同様に、Oracleの内部で大文字で変換されるため、
コンパイルエラーの内容もすべて大文字に変換されて出力されます。
小文字と大文字でそれほど変わりはないという人もいると思いますが、
開発者ならば利点のない記述よりも少しでも利点のある記述を
選択したほうがよいでしょう。

コメント (4)

大文字に変換するのにどれぐらい掛かるでしょう?
100msecも掛かりますか?

あなたのシステムは一日に何回ぐらいSQLを実行していますか?
そのうち、再利用されていないSQLはどれぐらいありますか?
(SELECT * FROM SYS.V_$SQL を実行すれば判ります)

プリペアド・ステートメントやストアードプロシージャなどを利用して、SQLを再利用するように気をつけてシステムを構築していれば、余程大きなシステムでもSQLのコンパイルは一日に1000回も起きないでしょう。
仮に、一回の大文字変換が 100msec、一日に1000回起きたとして、システム全体で短縮される処理時間は一日に100秒しかありません。

また、ストアドプロシージャにしてしまえば、コンパイル時に大文字変換も済んでいます。
実行時には、コンパイル後(大文字変換後)のSQLのみを利用するので、全く気にする必要はありません。

SQLはプログラムの可読性を考えて、大文字小文字を分けるべきです。
たとえば、テーブルのエイリアスは小文字。
ファンクションは頭文字だけ大文字など。


べた書きのSQLで、レコード件数回コンパイルされるようなシステムでは影響が出るかもしれませんが、ボトルネックは大文字変換にはありません。
プリペアド・ステートメントやストアードプロシージャにすればよいわけです。

開発者ならば、常にボトルネックを意識して記述しましょう。

大文字変換のパフォーマンスについては
あなたの言われてる通り
別に気にすることではないかと思います。
ただ、その点に関していえば
小文字を使う利点もないわけですが。

では、大文字だけでコードを書いた場合の
可読性についてはどうでしょう?
たしかに大文字小文字で分けて書いたほうが
コードを見たときの可読性は良くなるでしょう。

ただ、コードの可読性を良くする方法は
何も大文字小文字を分けるだけではありません。
大文字だけでコードを書くとしても、
例えば単語の区切りでアンダーバー"_"を使えば
十分可読性は良くなります。

Oracleではコンパイルエラー時にコードも全て
大文字に変換されてエラー内容が出力されます。
せっかく大文字小文字を分けて可読性を良くしてるのに、
エラー内容を見るときはまったく意味が
なくなってしまいます。

開発時にまったくエラーを見ることなく
プログラムを作り上げることは少ないかと思います。
大小さまざまなエラーがありますが、
数回は見ることになるでしょう。
エラーの内容を確認するときに、何回も見てるコードと
小文字が大文字に変換されたコードを見るのとで
見やすさは違ってきますよね。

ここで言われているボトルネック=可読性ということならば、
大文字だけでコードを書いてもボトルネックとはなりません。
むしろ大文字だけで書いたほうが利点は大きいかと思います。
大文字小文字と分けないと可読性が格段に落ちてしまう人ならば
それは直すように努力したほうがいいかもしれませんが、
特別大文字だけでコードを記述することを嫌う理由はないかと思います。

「コード」と「エラーの内容」では、プログラマーが眼にする機会は「コード」の方が遥かに多いです。
新規開発の途中においてのみ、エラーの方が注目する機会が多くなるタイミングが一度はあるでしょうけど、無視できるほど少ない期間と回数でしょう。それだけでは普段の可読性を落とす理由にはなりません。

先に通りすがりさんも書かれていますが、ボトルネックを意識するべきです。但しここで申し上げたのは 処理中の ではなく 開発中の ですが。

というか、ご自身でも書かれてますよね。

>開発時にまったくエラーを見ることなく
>プログラムを作り上げることは少ないかと思います。
>大小さまざまなエラーがありますが、
>数回は見ることになるでしょう。
>エラーの内容を確認するときに、何回も見てるコードと
>小文字が大文字に変換されたコードを見るのとで
>見やすさは違ってきますよね。

その通り、エラーを見るのは「数回は」というレベルで、コードは「何回も」見るのですよ。

------------

> 大文字だけでコードを書くとしても、
> 例えば単語の区切りでアンダーバー"_"を使えば
> 十分可読性は良くなります。

それで充分とは思えません。大文字とアンダーバー区切りだけで書かれたVBやC、Javaのプログラムを思い描いて下さい。到底読むに耐えません。SQLでは違う という理由もありません。

maeda,Asukaさんが何を主張されたいのかいまいちはっきりしませんが……

> それで充分とは思えません。大文字とアンダーバー区切りだけで書かれたVBやC、Javaのプログラムを思い描いて下さい。到底読むに耐えません。

実際のプログラム言語は文法だけでなく規約にも拘束されているということを知っていただきたいです。

VB, Java, Cが命名のときに単語を大文字小文字で区切るのは、読みやすさのためではなく規約だからです。
(定数名は、規約上アンダーバー区切りですね)

> SQLでは違う という理由もありません。

SQLでは違いますね。理由は、規約だからです。

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

photo
yamaoka