0

* (アスタリスク) を使用せずに、必要なフィールドに名前を付けるということをよく耳にします。パフォーマンスの問題またはセキュリティ上の理由によるものですか? 誰かがこれについて良い議論をすることができますか?

そうではない

SELECT * FROM users WHERE name='John';

代わりに

SELECT name FROM users WHERE name='John';
4

5 に答える 5

8

本番クエリでアスタリスクを使用しない最大の理由は、非 SQL コードをデータベース スキーマの変更から隔離すること、またはそのような変更が見過ごされにくくすることです。

たとえば、コードnameが最初の列に a をaddress、2 番目の列に a を期待するアスタリスクを使用してクエリを実行する場合、既に読み取っている 2 つの列の前に 3 番目の列を追加するようにスキーマが変更された場合、コードは代わりにその新しい列を取得します。また、住所の代わりに名前を入れます。最悪の事態は、クラッシュせずにすべてのことを実行することです。ユーザーは単にゴミデータを見るだけです。

対照的に、明示的に名前が付けられた列を持つクエリは、スキーマの変更にもかかわらず正しい列を取得するか、必要な列が削除または名前変更された場合に中断します。これにより、問題の原因がすぐに特定できるため、問題の調査と修正が容易になります。

于 2013-03-06T15:06:59.083 に答える
2

それはパフォーマンスの問題です。の場合、テーブル内のすべてのフィールドをSELECT *取得しています。の場合、名前フィールドのみを選択しています。必要なフィールドのみを選択すると、DBサーバーからアプリケーションに転送するデータが大幅に少なくなる可能性があります。SELECT name

于 2013-03-06T15:06:31.850 に答える
0

SELECT*は、テーブルからSELECT ALLを意味します。これにより、すべての列が選択されます。

ただし、クエリのように一部の列のみを選択するように指定した場合

SELECT name --->これは、name列のみを選択します

于 2013-03-06T15:05:38.007 に答える
0

* を選択すると、そのクエリのすべての列が取得されるため、必要な列だけを取得するのではなく、データセットのメモリ使用量が高くなります。

于 2013-03-06T15:07:07.893 に答える
-6

私にとっては、正気読みやすさ、常識の問題に似ています。

あなただけが必要なときname- なぜそれを明示的に書かないのですか?
これにより、クエリが読者にとってより有益なものになります。

しかし、この「パフォーマンス」のがらくたに従うためだけに、何十ものフィールド名を明示的に書いている貧しい開発者を見ると、私は傷つきます。

コメントからの重要な注意:
クエリ内のフィールドの順序や数に依存しないコードを記述することは非常に重要です。
したがって、*, fetch associative array を使用するだけで、コードがそのようなばかげた理由で壊れることはありません。

私の謙虚なテストでは、いくつかの違いがあります。0,0002 秒の端数。
まあ、そのような違いがアプリケーションの特定のボトルネックである場合は、明示的な書き込みフィールドを使用してください(ただし、パーサーがクエリを解析するのにより多くの時間がかかります
. . だから、私は気にしません。

于 2013-03-06T15:09:37.330 に答える