3

Select ColumnName を使用したアドホック クエリの方が優れていますが、プラン ガイドに保存された後のストアド プロシージャでは問題になるでしょうか?

4

6 に答える 6

5

ストアド プロシージャ内であっても、常に列を明示的に記述します。SELECT *悪い習慣と見なされます。

たとえば、返される列の順序がわからない場合、一部のアプリケーションは特定の列の順序に依存している可能性があります。

つまり、アプリケーション コードは次のようになります。

Id = Column[0]; // bad design

IDを使用した場合SELECT *、最初の列ではなくなり、アプリケーションがクラッシュする可能性があります。また、データベースが変更され、追加の 5 つのフィールドが追加された場合、関連しない可能性のある追加のフィールドが返されます。

于 2013-06-20T13:28:29.427 に答える
1

これらのトピックは常に、常にこれを行う、または決してそれを行わないなどの包括的なステートメントを引き出しますが、現実は、ほとんどの場合と同様に、状況に依存します. 通常、列をリストすることは良い習慣であることは認めますが、使用することが悪い習慣であるかどうかSELECT *は状況によって異なります。

すべてが共通のフィールドを 1 つまたは 2 つ持つさまざまなテーブルを考えてみましょう。たとえば、レイアウトが異なる多数のテーブルがありますが、それらはすべて「access_dt」と「host_ip」を持っています。通常、これらのテーブルを一緒に使用することはありませんが、疑わしいアクティビティによって、すべてのアクティビティの完全なレポートが要求される場合があります。これらは一般的ではなく、手動で確認されるため、すべてのログ テーブルをループしSELECT *、すべてのテーブル間の共通フィールドを利用してレポートを生成するストアド プロシージャによって適切に処理されます。

この状況でフィールドをリストするのは時間の無駄です。

繰り返しますが、フィールドを一覧表示することは通常は良い習慣ですが、 を使用することが常に悪い習慣であるとは限りませんSELECT *

編集:例を少し明確にしようとしました。

于 2013-06-20T13:59:27.427 に答える
0

これは一般的にベスト プラクティスですが、実際にすべての列が必要な場合は、すぐに読み取れる "SELECT *" を使用することをお勧めします。
重要なことは、必要のないデータを取得しないようにすることです。

于 2013-06-20T13:28:36.353 に答える
0

テーブルの行を XML としてアーカイブする場合など、列が変更されたとしても、テーブルのすべての列が必要な場合については誰も言及していません。怠惰や読みやすさのために、「テーブルに現在存在するすべての列が必要です」の代わりに「SELECT *」を使用しないでください。正当な理由が必要です。「テーブルに存在する可能性のあるすべての列」が必要な場合に不可欠です。

また、テーブルの「ラッパー」ビューを作成する場合はどうですか?

于 2013-06-20T14:41:03.083 に答える