それはすべてインデックスに依存しますが、私が考えることができるほとんどの場合、データへのアクセスSELECT COL_NAME
方法に関するより多くの「オプション」をSQLに提供するため、ナローセレクト()の方がパフォーマンスが向上します。
一般に、特定のクエリの場合、最良のシナリオは、WHERE
条件でインデックスシークを許可するインデックスを作成することですが、に必要な列も含まれますSELECT
。このように、RDBMSは、クエリの結果を取得するためにインデックスを使用するだけで済みます。基になるテーブルはまったく必要ありません。
MS SQL Serverでは、カバーインデックスを使用すると、これを正確に実行できます。
それはありそうもない
SELECT * FROM <TAB_NAME> WHERE <IND_COL_NAME> = XXXXXX
多くの場合、テーブル内のすべての列を含むインデックスがない限り、最適になります(クラスター化インデックスIND_COL_NAME
でない限り、ストレージの無駄になります)。<IND_COL_NAME>
それ以外の場合は、クエリがのインデックス<IND_COL_NAME>
を検索してから、物理テーブルに結合して残りの列データを取得する必要があることを意味します。
だからあなたの狭いクエリのために
SELECT COL_NAME FROM <TAB_NAME> WHERE <IND_COL_NAME> = XXXXXX
最適なインデックスは<IND_COL_NAME>
、を含むになりますCOL_NAME
。それが主キーであると言うので<IND_COL_NAME>
、それは非常に選択的です。