1. ホーム
  2. sql

[解決済み] select *を使用しない理由は何ですか?

2022-05-27 02:34:39

質問

セレクトクエリで使用する各カラムに具体的な名前を付けるべきだと主張する人を何人も見かけました。

どうせすべてのカラムを使うのであれば、どうして SELECT * ?

という質問を考えても、*. SQLクエリ - ビューから*を選択するか、ビューからcol1、col2、...colNを選択します。 * を考えても、私はこの問題に少し異なる観点からアプローチしているので、これは正確な重複ではないと思います。

私たちの原則の 1 つは、時間が経過する前に最適化しないことです。 このことを念頭に置くと SELECT * が望ましい。 メソッドであるべきです。リソースの問題であることが証明されるか、スキーマがかなり固まるまでは。 私たちが知っているように、開発が完全に完了するまで、それは起こりません。

とは言うものの、このような場合に SELECT * ?

どのように解決するのですか?

早まった最適化をしないという名言の本質は、シンプルでわかりやすいコードにすることであり では プロファイラを使用してホットスポットを指摘し、それを効率的に最適化することができます。

select * を使用すると、プロファイリングが不可能になるので、clear & straight code を書いていないことになり、引用の精神に反することになります。 select * はアンチパターンです。


列を選択することは時期尚早な最適化ではないのですね。頭からいくつか・・・。

  1. SQL 文で列を指定した場合、その列がテーブルから削除されてクエリが実行されると、SQL 実行エンジンはエラーになります。
  2. そのカラムが使用されているコードをより簡単にスキャンすることができます。
  3. 常に最小限の情報を持ち帰るようにクエリを書く必要があります。
  4. 他の人が言っているように、もしあなたが序数列アクセスを使うなら、決して select * を使うべきではありません。
  5. SQL 文がテーブルを結合する場合、select * は結合に含まれるすべてのテーブルのすべてのカラムを提供します。

このことから select * ...

  1. アプリケーションで使用される列は不透明です。
  2. DBA とそのクエリプロファイラが、アプリケーションのパフォーマンス不足を解消できない。
  3. 変更が発生した場合、コードがよりもろくなる
  4. データベースとネットワークは、大量のデータ(I/O)を持ち帰るため、苦しんでいます。
  5. すべてのデータを関係なく戻しているため、データベース エンジンの最適化は最小限です (論理)。

正しいSQLを書くことは、次のように書くのと同じくらい簡単です。 Select * . つまり、本当の怠け者は、コードを再検討して、そのときに何をしていたかを思い出そうとしないので、適切なSQLを書くのです。DBAにコードの隅々まで説明するのも嫌です。アプリケーションが犬のように動作する理由をクライアントに説明したくないのです。