重複の可能性:
select * と select column
20 列のテーブルがあるとします。select *
20列すべてを明示的に含むselectとの間に速度の違いはありますか?
違いがない場合、何をアドバイスしますか? レイジーを使用するselect *
必要がありますか、それとも各列でクエリ文字列を作成する必要がありますか?
(違いがある場合:私はSQL Serverを使用しています。)
重複の可能性:
select * と select column
20 列のテーブルがあるとします。select *
20列すべてを明示的に含むselectとの間に速度の違いはありますか?
違いがない場合、何をアドバイスしますか? レイジーを使用するselect *
必要がありますか、それとも各列でクエリ文字列を作成する必要がありますか?
(違いがある場合:私はSQL Serverを使用しています。)
速度についてはそれほど重要ではありませんが、保守性については...
アプリケーションが特定の列を要求し、テーブル構造が変更された (列が削除されたか名前が変更された) 場合、ステートメントは実行時に壊れ、問題がどこにあるかを正確に示します。
select * は構造の変更後も引き続き機能しますが、後でアプリケーションでより微妙な問題が発生し、追跡がより困難になる可能性があります。
前もって追加の作業が必要ですが、列を明示的にリストする方が保守性に優れています。
where句がパラメータ化されていると仮定すると、SQLは1回だけ解析され、その後ステートメントキャッシュにあるはずであり、実行速度はそれほど変わりません。
選択ステートメント自体に列名を含めることをお勧めします。テーブルの構造は将来変更される可能性があり、不要なデータを取得する可能性があるため..
パフォーマンスに関して
select * を使用する場合、SQL Server コンパイラは * を列名に置き換える必要がありますが、これは追加のタスクですが、無視できると思います