[解決済み] select *を使用しない理由は何ですか?
質問
セレクトクエリで使用する各カラムに具体的な名前を付けるべきだと主張する人を何人も見かけました。
どうせすべてのカラムを使うのであれば、どうして
SELECT *
?
という質問を考えても、*. SQLクエリ - ビューから*を選択するか、ビューからcol1、col2、...colNを選択します。 * を考えても、私はこの問題に少し異なる観点からアプローチしているので、これは正確な重複ではないと思います。
私たちの原則の 1 つは、時間が経過する前に最適化しないことです。 このことを念頭に置くと
SELECT *
は
が望ましい。
メソッドであるべきです。リソースの問題であることが証明されるか、スキーマがかなり固まるまでは。 私たちが知っているように、開発が完全に完了するまで、それは起こりません。
とは言うものの、このような場合に
SELECT *
?
どのように解決するのですか?
早まった最適化をしないという名言の本質は、シンプルでわかりやすいコードにすることであり では プロファイラを使用してホットスポットを指摘し、それを効率的に最適化することができます。
select * を使用すると、プロファイリングが不可能になるので、clear & straight code を書いていないことになり、引用の精神に反することになります。
select *
はアンチパターンです。
列を選択することは時期尚早な最適化ではないのですね。頭からいくつか・・・。
- SQL 文で列を指定した場合、その列がテーブルから削除されてクエリが実行されると、SQL 実行エンジンはエラーになります。
- そのカラムが使用されているコードをより簡単にスキャンすることができます。
- 常に最小限の情報を持ち帰るようにクエリを書く必要があります。
- 他の人が言っているように、もしあなたが序数列アクセスを使うなら、決して select * を使うべきではありません。
- SQL 文がテーブルを結合する場合、select * は結合に含まれるすべてのテーブルのすべてのカラムを提供します。
このことから
select *
...
- アプリケーションで使用される列は不透明です。
- DBA とそのクエリプロファイラが、アプリケーションのパフォーマンス不足を解消できない。
- 変更が発生した場合、コードがよりもろくなる
- データベースとネットワークは、大量のデータ(I/O)を持ち帰るため、苦しんでいます。
- すべてのデータを関係なく戻しているため、データベース エンジンの最適化は最小限です (論理)。
正しいSQLを書くことは、次のように書くのと同じくらい簡単です。
Select *
. つまり、本当の怠け者は、コードを再検討して、そのときに何をしていたかを思い出そうとしないので、適切なSQLを書くのです。DBAにコードの隅々まで説明するのも嫌です。アプリケーションが犬のように動作する理由をクライアントに説明したくないのです。
関連
-
[解決済み] アドホッククエリとは何ですか?
-
[解決済み] SQL ServerでSELECTからUPDATEする方法とは?
-
[解決済み] MySQLでコマンドラインを使用してSQLファイルをインポートするにはどうすればよいですか?
-
[解決済み] SQL Server の DateTime データ型から日付だけを返す方法
-
[解決済み] 各GROUP BYグループの最初の行を選択しますか?
-
[解決済み] SQLのSELECTでIF...THENを実行するにはどうすればよいですか?
-
[解決済み] ...値に挿入する ( SELECT ... FROM ... )
-
[解決済み] UNIONとUNION ALLの違いは何ですか?
-
[解決済み] SQL Server の CASE ステートメントで OR がサポートされていない。
-
[解決済み】「INNER JOIN」と「OUTER JOIN」の違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ERROR 1136 (21S01) を解決してください。列の数が Mysql の行 1 の値の数と一致しません。
-
org.postgresql.util.PSQLException: ERROR: リレーション "userinfo" の列 "loginid" が存在しません。
-
[解決済み] ATTACHで開いたSQLiteデータベースファイルのテーブルを一覧表示するにはどうすればよいですか?
-
[解決済み] SQL Serverでテーブルからカラム名を取得するにはどうすればよいですか?
-
[解決済み] 各グループの上位1行を取得
-
[解決済み] SQL Server の VARCHAR/NVARCHAR 文字列に改行を挿入する方法
-
[解決済み] Count()で条件を指定することは可能ですか?
-
[解決済み] SQL Serverで、ある日付より大きいすべての日付を照会するにはどうすればよいですか?
-
[解決済み] 別のテーブルに一致する項目がない行を選択するにはどうすればよいですか?
-
[解決済み】SELECT *が有害とされるのはなぜですか?