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

SQLについて質問です。
SELECTでワイルドカードを使ってはいけない、つまり
select * from ...
と書いてはいけない、必ず列名を列挙して
select a, b, c, d from ...
と書かなくてはならない、という常識があるそうですが、
ワイルドカードを使ってはならない理由を教えてください。
よろしくお願いします。

●質問者: tgk
●カテゴリ:コンピュータ
✍キーワード:SELECT SQL ワイルドカード 常識
○ 状態 :終了
└ 回答数 : 6/6件

▽最新の回答へ

1 ● tsukasa57
●19ポイント

http://blog.livedoor.jp/akf0/archives/51422387.html

http://www.geocities.jp/mickindex/database/db_optimize.html#Loca...

パフォーマンスの問題のようです。


2 ● y-kawaz
●19ポイント

別にいけないという訳では無いと思いますが以下の点でそうしておいた方が、後々助かることが多いかと。

・後からカラムの追加削除があった際に結果レコードに対してインデックスでアクセスしていた場合列がずれる問題がおこるかも

・カラムが沢山(例えば100カラム)あるテーブルに対して必要なデータが数カラムだった場合、使わないカラムデータは捨てられるだけなのでメモリやネットワークの無駄

・テーブル定義を見なくてもプログラムソースを見るだけでもテーブル定義が把握しやすい

他にも有ると思いますが主なのはこんなとこではないでしょうか。


3 ● きゃづみぃ
●18ポイント

テーブルの定義が変わった場合、ストアドなど再コンパイラしないと エラーになる場合があります。

そういうのを回避するためにも *の使用は、控えたほうがいいでしょう。


4 ● munyaX
●18ポイント

結論から言うとパフォーマンス面の問題です。


ソースを見つけられなかったのですが、以前Oracleを触っていた時に調べた際には、

select句を実行する際、内部ではかなり大雑把に言うと以下のような流れになります。


select句を実行

→ 処理

→ 内部の一時テーブルに格納

→ fetchされる度に要求に従い返却


まず最初にネックになるのは、DBMSがシステム的に保有する一時テーブルに格納する

段階のパフォーマンスですね。次にfetchの要求があるたびに、DBからプログラム側へ

渡すデータ量(処理量)の違いでしょうか。


単純に利用しない項目も同時に処理することで全体的に処理しなければならない量が

増えることで、

・処理スピードの低下

・メモリやディスク(スワップ時など)の消費、

・トラフィック量の増加

といった結果になります。



PHP+Smartyで作ってると将来のメンテ工数を考えて、テンプレート側で自由に項目の

利用ができるように全部渡してしまうこともあるんですけどね。ホントは良くないと

知りつつ。


5 ● chibitomo
●18ポイント

もう回答でちゃってるけど

本当、一番の理由はデバグしてるとき

どのテーブル見てるのか分かりやすくするため。

テーブル名かえることなんて多々あるし。

プログラムでもよくあるじゃん、マジックナンバーは使うなって。

http://ja.wikipedia.org/wiki/%E3%83%9E%E3%82%B8%E3%83%83%E3%82%A...(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0)

あと超多アクセスあるDBだと全部のテーブルselectさせるとDBの負荷を極力避けるため。

インデックス振ってあるテーブルのみならなおさら。塵も積もればMYSQL。

でも仕事でくそ安いCMSとかマッチングサイト構築しているときガンガン使ってるけどな。


1-5件表示/6件
4.前の5件|次5件6.
関連質問


●質問をもっと探す●



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