一般に、SQLでSELECT*を使用することは悪い考えであることを理解しています。例外的なケースはありますか?ありがとう!
3 に答える
一部が追加または削除される可能性があることを考慮して、現在および将来のすべての列が必要な場合。
通常、これは、スキーマリスターなど、データベース情報を完全に必要とするツールの場合、または必要な情報が実際にどこにあるかを調べるために分析を行っている場合にのみ当てはまります。
「実際の」アプリケーションにはほとんど必要ありません。「実際の」アプリケーションは、必要なものだけを知り、要求する必要があります。
データベースの他のユーザーが、すべての行に42個の2GB BLOB列を追加する必要があると判断したからといって、アプリケーションが悲鳴を上げるような山に陥るのは望ましくありません:-)
通常は、わいせつな量のデータを移動する場合にのみ問題になります。これは、スループットが最大になるためです。
アプリケーションのプロトタイピングに関する限り、ALTERINGテーブルを簡単にするため、頻繁に使用します。
MySQLの性質上、処理に関しては問題ではありません。
だから心配しないでください。
それを使用するコードが列名を自動的にプルし、後でアプリケーションでさらに使用するためにすべての名前をマップできる場合は、を使用する必要がありますSELECT *
。
ただし、取得する列の位置を想定したくなる可能性があるため、通常はお勧めできません(使用するDB APIによっては、名前ベースではなくインデックスベースになる場合があります)。読みやすくするために、取得したいものを明示的に書き留めておくこともよくあります。
使用時に問題を引き起こす可能性のあるものがいくつかありますSELECT *
:
- 列ラベルが明確に定義されていない場合(たとえば
SUM(...)
、ビューまたはCTEからの操作など)、 - 選択範囲内の複数の列が同じ名前の場合(たとえば、結合またはビュー/ CTEと
AS
句)。
JavaResultSet
は、名前について次のように述べています。
値は、列のインデックス番号または列の名前のいずれかを使用して取得できます。一般に、列インデックスを使用する方が効率的です。
[...]
getterメソッドが列名で呼び出され、複数の列が同じ名前である場合、最初に一致する列の値が返されます。列名オプションは、結果セットを生成したSQLクエリで列名が使用される場合に使用されるように設計されています。クエリで明示的に指定されていない列の場合は、列番号を使用するのが最適です。列名を使用する場合、プログラマーは、意図した列を一意に参照するように注意する必要があります。これは、SQLAS句で保証できます。