アプリケーションのコードで SELECT *
(ワイルドカード)としてカラム名を省略するのは、アンチパターンです。
SQLアンチパターンという名書でも紹介されています。
18章 インプリシットカラム(暗黙の列)
SELECT *
がダメなのは、あくまでアプリケーション側でハードコードされたSQLについて述べています。
調査などで直接、DBに入り SELECT *
とする分には問題ありません。
ただし、BigQueryのように大量のデータを検索する際は、絞ったほうが良いでしょう。
SELECT * のメリットとデメリット
カラム名の省略は、アンチパターンです。
カラムを省略せずに、きちんとカラム名を指定しましょう。
では、なぜカラム名の省略がアンチパターンなのか?
カラム名の省略のメリットとデメリットを並べてみます。
メリット
- タイプ数が、圧倒的に少なく可読性がよい
- 開発時の効率がよい
こんなところかな。
$sql = 'SELECT * FROM USER';
デメリット
メリットに比べ、デメリットはたくさんあります。
- パフォーマンス面
- アプリケーションサーバとDBサーバ間で必要以上の帯域幅を使用する
- 必要以上にメモリを消費する
カラム名を省略すると、実際の処理に必要のないカラムまでDBから取得することになります。
- メンテナンス性が悪い
もし、テーブルのカラムを削除したり、名前変更した場合、実行エラーになりません。
実行エラーにならず、処理は継続され削除されたカラムを参照しようとした別のコードで、エラーになります。
ということは、エラーになった原因を特定するのが難しくなります。
影響範囲を小さくするために、参照( SELECT
)の時点でエラーにするべきです。
カラム名は指定しよう
上記のメリットとデメリットを考慮した上で、考えるべきポイントは、どちらが長期にわたって生産的かというところだと思います。
カラム名を省略すると、初回の開発効率は良いと思いますが、システムのライフサイクルを考えると僅かな時間のはずです。
何度もシステムをメンテナンスし成長させていくには、カラム名を省略しないほうが生産的です。