2011-08-11 11 views
-3

ストアドプロシージャがコンパイルされたコード単位であるため、ストアドプロシージャでの使用に対して、ダイナミックT-SQLステートメントでワイルドカード解釈で使用された場合、Select * from <table/view>はワイルドカード解釈に関して同じパフォーマンスを意味しますか?SQL Serverワイルドカード

SELECT *は欠点の3つの主な種類があり、ワイルドカードの解釈に関する同じパフォーマンスの意味合い を持っているから

ん選択*:

+2

あなたの質問は非常に不明です。いくつかの例が役に立ちます。 – Oded

+0

質問が投票されたのはなぜですか? – klork

+0

私は理解していない理由のために時には投票しすぎることがあります。 – Paparazzi

答えて

3

あなたの質問に答えるためには、それは少し離れて選んだする必要があります:

  • コードメンテナンス:SELECT *を使用すると、複雑なテーブル/クエリの可読性が低下し、cクライアントアプリケーションがクエリの特定の結果を期待しているのにテーブルが変更された場合の原因の問題
  • ネットワークパフォーマンス:結果をクライアントアプリケーションに返すときにSELECT *を使用すると、すべての列がクライアントに返されます。これらの列の一部のみがクライアントによって使用されている場合、帯域幅は無駄になり、アプリケーションはできるだけ低速で実行されます。
  • インデックス作成/クエリプランのパフォーマンス:実際にはインデックスに参加する列を返すだけで、そのすべてを代わりに返す必要があるクエリがある場合は、エンジン。

「ワイルドカード解釈に関する意味」とはどういう意味かわかりませんが、SELECT *が悪い考えであると誤解していると思われます。 「拡張」ワイルドカードのコストは、ストアドプロシージャがストアドプロシージャが実際に「コードのコンパイル単位」でないコード

のコンパイル単位であることを本質的に与えられた0

あります。ストアド・プロシージャの問合せ計画は、通常は最初に実行された後にキャッシュされますが、多くの/ほとんどの状況でも同様のアドホックSQL文が実際に適用されます。 はいのように、アドホックSQLでSELECT *を使用した場合の短所も、同様にストアドプロシージャ内のSQLに適用されます。

+0

私は、内部結合がある場合、select *を使用するときに必要以上の列を返し、リソースを無駄にしてしまうということを指摘します。結合列は定義によって繰り返されます。 – HLGEM