
SQLのSELECT文に
*(ワイルドカード)を使うのはあまりよろしくないと
http://oshiete.goo.ne.jp/qa/6276536.html
で掲載されています。
基本的に ”使う分だけ”
カラムを一個一個指定していくのが定石でしょうか。
使いたいカラムが増えたら、その都度SELECT文にも項目を
足していくのでしょうか。
よろしくお願いします。
No.2ベストアンサー
- 回答日時:
DBMSの持つ重要な要素の一つが、「データの独立性」です。
これは、DBの定義変更があっても、その変更部分を直接操作しないアプリは、変更する必要がないというものです。この意味は、DB操作だけでなく、直接ファイル操作するようなアプリを数多く開発した経験がある人なら、その重要性が分かるでしょう。
RDBMS登場以前の階層型DBMS、ネットワーク型DBMS、それらの国際標準規格準拠の構造型DBMSでは、DDLで吸収していました。
RDBMSでは、これをさらに「データ受け渡しする列を、事前に定義系SQLで定義せず、操作系SQLで決められる」という特長を持ちました。
RDBMSでの実装の上で問題になっているのが、「データ受け渡しする列数が多くなると、極端に性能劣化してしまう」ということです。
大規模システムではこのオーバヘッドは非常に影響が大きく、いくつかのRDBMSでは、この解決手段として、「固定長の列だけで表を構成した場合、性能向上を図れる」、あるいはこれとの組み合わせなどで、「表の定義順で全列を受け渡しする場合、列数が増えても一定の性能を出せる」といった性能対策を実装しているものもあります。
MySQLでも、固定長の列だけで表を構成した場合、性能向上を図れるといった性能対策を行っています。
これらのことから、「実際に操作する必要最小限の列だけを、明示的に指定する」といったことが推奨される大きな要因になっています。
詳細な回答ありがとうございます。
リレーションするかどうか、
このカラムを使うかどうかを
事前に定義しないゆえに
SELECT文等の操作側でひとつひとつ
SQL自身が判断しなくてはならず
重くなってしまうということですね。
カラムを事前指定したほうがいい理由がよくわかりました。
No.1
- 回答日時:
私はケースバイケースだと思ってます。
そのテーブルにあるカラムのデータ全てが欲しいのであれば * でもいいと思います。
ほんの一部のデータしか欲しくないのであれば、カラム名を指定して絞り込む方がスピードが上がるしメモリの使用量も少なくて済みます。
また、プログラム側で取り出したデータを処理する時、カラムの名称を指定してデータが取り出せるのであれば * でも問題ありませんが、1つ目のカラムのデータといった形の番号指定で取り出す場合、何番目にどのカラムの値が入っているのか分かりませんから、ちゃんと取り出したい順番を指定する意味でカラム名を書くのがいいでしょう。
回答ありがとうございます。
たしかにカラム指定するとスピードが上がりました。
ただ、最低限かならず使うカラムというのがあり
毎度毎度DB読み込みの度に書くのは手間なので
SELECT文の一部を変数にするとか
関数化するとかして、対応したいと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
UNIONする際、片方テーブルしか...
-
SELECT文で、指定カラム以外の...
-
AUTO_INCREMENTに0はダメ?
-
カラムとコラムの使い分け
-
構造が異なる二つのテーブルをu...
-
SQLでカラムを追加し、条件に合...
-
エクセルかワードで家系図を作...
-
SELECTの検索速度と、DB設計
-
GREATESTで NULLをスルーする方...
-
【SQL】select に ワイルドカー...
-
ドロップダウンリストの連動し...
-
ホームページを作ろうと思いま...
-
DBエラーの意味
-
now()かCURRENT_TIMESTAMPか
-
一部のカラムでdistinctし全て...
-
他のシートの検索
-
INDIRECT関数の代替方法は?
-
複数カラムに対するLIKE文の最適化
-
DBの定義のサイズを大きくし過...
-
テーブルの列数を調べたい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SELECT文で、指定カラム以外の...
-
一部のカラムでdistinctし全て...
-
UNIONする際、片方テーブルしか...
-
ホームページを作ろうと思いま...
-
AUTO_INCREMENTに0はダメ?
-
SQLでカラムを追加し、条件に合...
-
MYSQLで全てのカラムから検索す...
-
now()かCURRENT_TIMESTAMPか
-
カラムとコラムの使い分け
-
MySQLで論理名を取得する方法
-
GREATESTで NULLをスルーする方...
-
【SQL】select に ワイルドカー...
-
エクセルかワードで家系図を作...
-
カラムをコピーして、新規カラ...
-
波形データを格納するデータベース
-
update時にtimestampが更新され...
-
カラム表示の幅
-
アドレスブックの登録について
-
最大2147483647なのに何故int(1...
-
MySQLで先頭にカラムを追加
おすすめ情報