- PR -

SQL文「Select *」を使用するのは邪道?

投稿者投稿内容
M@tch
会議室デビュー日: 2005/10/01
投稿数: 13
投稿日時: 2009-01-16 16:38
皆様のご意見をお聞かせ願います。

■開発環境
OS:VISTA SP1
言語:VB2005
DB:SQLServer2005

■質問事項
ソース上に記述するSQL文において、たとえばAテーブルの
5割以上の項目を使用する場合のSELECT文で「select * from A」と
するのは避けましょうと言われます。
要するに使用する項目を1つずつちゃんと記述しなさいということなのです。

100項目あるようなテーブルの2,3個の項目を使用するためだけに、
「Select * from A」とするのは、レスポンスやメモリ使用率等の観点から
避けようという気にはなりますが、厳密にはどうなんでしょうか?

抽出されるレコード件数にも左右されるとも思われますが、皆さんが
SQLを書く上での持論をお聞かせ下さい。

ざっくりな質問になりましたが、ご意見を頂けると幸いです。
以上、よろしくお願い致します。
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2009-01-16 16:52
ちなみにこういう話題はわりと定期的に出てくるものです。

件名:SQLServerのSQL「SELECT * FROM 〜」でレスポンスは低下するのか
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=30828&forum=26

などが近い話題だと思います。
(なお、私は、あくまでも過去にこういうスレッドがあったという紹介をしただけです。たとえばですが、検索してから質問しろ、とか、そういう意図はないです。過去は過去、今は今、で話があっても良いと思います。)

引用:

M@tchさんの書き込み (2009-01-16 16:38) より:
100項目あるようなテーブルの2,3個の項目を使用するためだけに、
「Select * from A」とするのは、レスポンスやメモリ使用率等の観点から
避けようという気にはなりますが、厳密にはどうなんでしょうか?


もし、そういう考えをお持ちならば、やはり避けるべきだと思います。コンピューターの世界では、スケーラブルに考えたほうが良いですから、もしも、100の内の 2, 3 を気にするという前提があるのであれば、n (整数)のすべてのケースにそれを適用するほうが良いと思います。
ジン
ベテラン
会議室デビュー日: 2007/07/27
投稿数: 52
投稿日時: 2009-01-16 17:20
使用する項目を明確にする。
メモリーの使用率軽減。

の為 * の使用は避けてきました。


以前にテーブル項目1000個(テーブル設計はどうなの?は置いといて)
のテーブルをSelectする際、ズラズラと項目を書くより
* を使用したほうが圧倒的にパフォーマンスが良かった事はあります。
さかもと
ぬし
会議室デビュー日: 2004/05/14
投稿数: 586
投稿日時: 2009-01-16 17:37
さかもとと申します。

高パフォーマンスを要求されるのであれば、厳密に実測して比較検討するべきだとは思いますが、それほど厳密なパフォーマンスを求められないのであれば select * でも良いと思っています。

項目の数が多いとなると、それなりにコーディングに時間がかかりますし、文字列として入力する場合などは実行時エラーの種とも成りえます。そちらに力と工数を費やす余裕がない(ケースが私の周りで最近多いので)場合はサーバーのスペックを少しだけ上げてもらえれば解決するのでは?と割り切っています。調査&*→全項目入力で10人日掛るならメモリをちょっと増やす方が断然安いみたいな大雑把な割り切り方ですが。





_________________
------------------------------------------
拝啓、さかもとと申します♪
ごん太
大ベテラン
会議室デビュー日: 2002/07/30
投稿数: 182
お住まい・勤務地: 森の中
投稿日時: 2009-01-16 17:45
自分の場合は、取得したい項目数が多い場合は”*”を使用しています。

ただ大量のデータを取得したい場合は、必要項目を書く場合と”*”とで「set timing on」等を使用し計って選んでます。

M@tch
会議室デビュー日: 2005/10/01
投稿数: 13
投稿日時: 2009-01-16 18:14
引用:

もし、そういう考えをお持ちならば、やはり避けるべきだと思います。コンピューターの世界では、スケーラブルに考えたほうが良いですから、もしも、100の内の 2, 3 を気にするという前提があるのであれば、n (整数)のすべてのケースにそれを適用するほうが良いと思います。



unibonさん
参考URLとご意見ありがとうございました。
「コンピューターの世界では、スケーラブルに考えたほうが良い」という意見
は私も同意見です。TPOに合わせて妥当なSQLを選択するというのが
よさそうですね。
M@tch
会議室デビュー日: 2005/10/01
投稿数: 13
投稿日時: 2009-01-16 18:17
ジンさん
ご意見ありがとうございます。
引用:

以前にテーブル項目1000個(テーブル設計はどうなの?は置いといて)
のテーブルをSelectする際、ズラズラと項目を書くより
* を使用したほうが圧倒的にパフォーマンスが良かった事はあります。


そうですよね。^^;その場合は項目記述忘れなども気になりますしね!
参考にさせて頂きます。
M@tch
会議室デビュー日: 2005/10/01
投稿数: 13
投稿日時: 2009-01-16 18:20
さかもとさん
ご意見ありがとうございます。
引用:

項目の数が多いとなると、それなりにコーディングに時間がかかりますし、文字列として入力する場合などは実行時エラーの種とも成りえます。そちらに力と工数を費やす余裕がない(ケースが私の周りで最近多いので)場合はサーバーのスペックを少しだけ上げてもらえれば解決するのでは?と割り切っています。調査&*→全項目入力で10人日掛るならメモリをちょっと増やす方が断然安いみたいな大雑把な割り切り方ですが。


確かにそうですね。。
やはりTPOに合わせて妥当なSQLってところに納まりそうですね。
参考にさせて頂きます。

スキルアップ/キャリアアップ(JOB@IT)