dポイントプレゼントキャンペーン実施中!

SQLのSELECT文に
*(ワイルドカード)を使うのはあまりよろしくないと
http://oshiete.goo.ne.jp/qa/6276536.html
で掲載されています。

基本的に ”使う分だけ”
カラムを一個一個指定していくのが定石でしょうか。

使いたいカラムが増えたら、その都度SELECT文にも項目を
足していくのでしょうか。

よろしくお願いします。

A 回答 (2件)

DBMSの持つ重要な要素の一つが、「データの独立性」です。


これは、DBの定義変更があっても、その変更部分を直接操作しないアプリは、変更する必要がないというものです。この意味は、DB操作だけでなく、直接ファイル操作するようなアプリを数多く開発した経験がある人なら、その重要性が分かるでしょう。

RDBMS登場以前の階層型DBMS、ネットワーク型DBMS、それらの国際標準規格準拠の構造型DBMSでは、DDLで吸収していました。
RDBMSでは、これをさらに「データ受け渡しする列を、事前に定義系SQLで定義せず、操作系SQLで決められる」という特長を持ちました。

RDBMSでの実装の上で問題になっているのが、「データ受け渡しする列数が多くなると、極端に性能劣化してしまう」ということです。

大規模システムではこのオーバヘッドは非常に影響が大きく、いくつかのRDBMSでは、この解決手段として、「固定長の列だけで表を構成した場合、性能向上を図れる」、あるいはこれとの組み合わせなどで、「表の定義順で全列を受け渡しする場合、列数が増えても一定の性能を出せる」といった性能対策を実装しているものもあります。

MySQLでも、固定長の列だけで表を構成した場合、性能向上を図れるといった性能対策を行っています。

これらのことから、「実際に操作する必要最小限の列だけを、明示的に指定する」といったことが推奨される大きな要因になっています。
    • good
    • 0
この回答へのお礼

詳細な回答ありがとうございます。

リレーションするかどうか、
このカラムを使うかどうかを
事前に定義しないゆえに
SELECT文等の操作側でひとつひとつ
SQL自身が判断しなくてはならず
重くなってしまうということですね。

カラムを事前指定したほうがいい理由がよくわかりました。

お礼日時:2011/06/04 10:36

私はケースバイケースだと思ってます。


そのテーブルにあるカラムのデータ全てが欲しいのであれば * でもいいと思います。
ほんの一部のデータしか欲しくないのであれば、カラム名を指定して絞り込む方がスピードが上がるしメモリの使用量も少なくて済みます。

また、プログラム側で取り出したデータを処理する時、カラムの名称を指定してデータが取り出せるのであれば * でも問題ありませんが、1つ目のカラムのデータといった形の番号指定で取り出す場合、何番目にどのカラムの値が入っているのか分かりませんから、ちゃんと取り出したい順番を指定する意味でカラム名を書くのがいいでしょう。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
たしかにカラム指定するとスピードが上がりました。
ただ、最低限かならず使うカラムというのがあり
毎度毎度DB読み込みの度に書くのは手間なので
SELECT文の一部を変数にするとか
関数化するとかして、対応したいと思います。

お礼日時:2011/06/04 10:14

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す