DB2での質問になります。(DB2に固有な話とは思えませんが)
質問内容はタイトルのとおりなのですが、全項目を取得しなければならないselectの場合、*で引っ張ってくるとパフォーマンスに影響するので全項目をコーディングしなければならないと言われたことがあります。
これって都市伝説でしょうか?
前提:
- カラム数は120程度
- 全レコード数は1000万レコード程度のテーブル
- レコード長800~1000バイト程度
- 一回のselectで20レコード程度取得(さすがにwhereは指定しています)
背景:
- PL/SQLにてカーソル定義でselectをコードしている
- カーソルforループでレコードを取り出して汎用ルーチンにパラメーターで渡している
- 汎用ルーチンのインターフェースとしてパラメーター定義に%ROWTYPEが付加されている
- 上記にてレコードにカラムを追加したらコンパイルでエラーとなり、調べたらカーソルのselectのコーディングにもカラムを追加しなければならないとわかったが、どうしてそこは「select *」しておかないのかと聞いたらタイトルのような理由と言われた
- パフォーマンスはハードが稼ぐものであり、将来の保守によるバグを生まないコードとして「select *」が望ましいのではないかと自分は思ってしまった・・・
回答5件
あなたの回答
tips
プレビュー