3

私はこの質問をグーグルで検索しましたが、一貫した意見、または確かなデータに基づく多くの意見を見つけることができないようです。SQL SELECTステートメントでワイルドカードを使用すると、各アイテムを個別に呼び出すよりも追加のオーバーヘッドが発生するかどうかを知りたいだけです。いくつかの異なるテストクエリで両方の実行プランを比較しましたが、見積もりは常に同じであるようです。他の場所でオーバーヘッドが発生する可能性はありますか、それとも本当に同じように処理されますか?

私が具体的に言及していること:

SELECT *

対。

SELECT item1, item2, etc.
4

5 に答える 5

9
SELECT * FROM...

SELECT every, column, list, ... FROM...

どちらも最適化されていないスキャンであるため、同じように実行されます

違いは次のとおりです。

  • 解決するsys.columnsの追加のルックアップ*
  • テーブルスキーマが変更されると、コントラクト/署名が変更されます
  • カバーするインデックスを作成できない。実際、チューニングオプションはまったくありません。
  • スキーマにバインドされていない場合は、必要なビューを更新する必要があります
  • *を使用してビューにインデックスを付けたりスキーマバインドしたりすることはできません
  • ...そして他のもの

同じ主題に関する他のSOの質問...

于 2009-12-08T16:18:28.253 に答える
2

select * from ...代わりにという意味select col1, col2, col3 from ...ですか?

列に名前を付けて、最小限の情報を取得する方が常に良いと思います。

  • コードは、データベース内の列の物理的な順序とは関係なく機能します。列の順序はアプリケーションに影響を与えないはずですが、を使用する場合は影響します*。dbの移行などの場合は危険です。
  • 列に名前を付けると、DBMSは実行をさらに最適化できます。たとえば、関心のあるすべてのデータを含むインデックスがある場合、テーブルにはまったくアクセスされません。

「ワイルドカード」で他のことを意味する場合は、私の答えを無視してください...

于 2009-12-08T16:18:18.433 に答える
1

編集:のようにアスタリスクのワイルドカードについて話している場合は、Select * From ...他の応答を参照してください...

(_ , % )以下で説明するように、述語句のワイルドカード、またはLike演算子を使用した他のクエリ式について話している場合は、次のようにします。

これは、ワイルドカードの使用がSQLが「SARG可能」であるかどうかに影響するかどうかと関係があります。SARGABLE、(Search-ARGument-able)は、クエリの検索または並べ替え引数を既存のインデックスへのエントリパラメータとして使用できるかどうかを意味します。引数の先頭にワイルドカードを追加した場合

 Where Name Like '%ing'

その場合、名前フィールドのインデックスをトラバースして、「ing」で終わるノードを見つける方法はありません。

最後にワイルドカードを追加すると、

Where Name like 'Donald%' 

その場合、オプティマイザは引き続き名前列のインデックスを使用でき、クエリは引き続きSARG可能です。

于 2009-12-08T16:16:47.350 に答える
0

それをSQLと呼ぶなら、ワイルドカーは*です。それ自体がパフォーマンスのオーバーヘッドを意味するものではありません。ただし、テーブルが拡張されている場合は、検索していないフィールドを取得していることに気付く可能性があります。一般に、検索または挿入するフィールドを具体的にしないことは悪い習慣です。検討

insert into mytable values(1,2)

テーブルが3つのフィールドに拡張されるとどうなりますか?

于 2009-12-08T16:22:56.637 に答える
0

実行計画の観点からは、それ以上の作業ではないかもしれません。しかし、実際には必要のない列をフェッチする場合は、データベースとアプリケーションの間で追加のネットワーク帯域幅が使用されます。また、返されたデータ (たとえば、Perl のselectall_hashref) に対して何らかの作業を実行する高レベルのクライアント API を使用している場合、それらの余分な列はクライアント側にパフォーマンス コストを課します。いくら?依存します。

于 2009-12-08T16:32:33.450 に答える