SELECT * と SQL Azure

SELECT * AND SQL Azure – SQL Azure Team Blog – Site Home – MSDN Blogsを簡単に翻訳したエントリーです。

全ての良いDBAと開発者は、特別必要が無ければ全てのレスを返すクエリを発行すべきで無いことを知っています。

SELECT * FROM [Table]

SELECT文では、必要な列のみを返すようにします。SELECT *を使用すると余計なページングの原因となります。RFIDルックアップ、不必要なテーブルロック、カバードインデックスの作成意図の無効化等が発生します。結果としてパフォーマンスに悪影響が出ます。

さらに、SQL Azureには SELECT *を使用すべきでない理由があります。データ転送料に応じた課金を行うからです。もし、(Windows Azureアプリケーションではない)データセンターの外から使用する場合、クエリによって発生するデータ転送量に応じて料金を支払います。もし使用しない列も要求すると、使用していないデータの転送量にまで支払うことになります。

SELECT *クエリを削除することをあなたのTO-DOリストにあるのなら、SQL Azureですばらしい体験ができるでしょう。

 

(コメント欄より抜粋)

Entity FrameworkのようなORMでも、SELECT *は生成させるべきで無い。しかし、「Oraders.Where」や「.OrderBy」などを使用しても、特別にSELECT句「.select」を指定しない場合、SELECT *が生成されてしまいます。