列が含まれているかどうかにかかわらずクエリのパフォーマンスに影響がありますが、列が含まれている場合は肯定的な影響(時間の短縮)が影響します。列を含めるとクエリのパフォーマンスが向上するSQL Server 2008
クエリは、ビューにいくつかのテーブルを結合して、次のような値関数を提出数が含まれています
SELECT
v1.field1, t2.field2
FROM
view v1 WITH (nolock)
INNER JOIN
table t1 WITH (nolock) ON v.field1 = t1.field1
INNER JOIN
table2 t2 WITH (nolock) ON t2.field2 = t1.field2
INNER JOIN
function1(@param) f1 ON f1.field3 = t2.field3
WHERE
(v.date1 = @param OR v.date2 = @param)
私はselect
内のビューの一部(あるvarchar(200) not null
列が含まれている場合のものです元の表やビューでは索引付けされておらず、制約の一部ではありません)、問合せのパフォーマンスはX秒ですが、それを含めなければ、パフォーマンスは4倍にアップします。単に列を含めるためです。それはしかし、否定的な方法で実際のパフォーマンスに影響を与えずに、クエリのパフォーマンスを向上させ、カラムを削除するには必須です
SELECT
v1.field1, t2.field2, v1.fieldWhichAffectsPerformance
view v1 WITH (nolock)
INNER JOIN
table t1 WITH (nolock) ON v.field1 = t1.field1
INNER JOIN
table2 t2 WITH (nolock) ON t2.field2 = t1.field2
INNER JOIN
function1(@param) f1 ON f1.field3 = t2.field3
WHERE
(v.date1 = @param OR v.date2 = @param)
:そう最高の性能を持つクエリは次のようになります。何か案は?
EDIT:私は実行計画を見直しましたが、列のないクエリは余分なハッシュマッチ(左外部結合)を実行し、インデックススキャンを使用します。列が含まれたクエリ。パフォーマンスに影響を与えずに列を削除するにはどうすればよいですか?何か案は?
selectの列を使用して実行計画を転記します。統計情報が最新のものであることを確認してください。 –
[NOLOCKをどこにでもぶつけるための悪い習慣](http://blogs.sqlsentry.com/aaronbertrand/bad-habits-nolock-everywhere/) - それは推奨されません*どこでもこれを使用する - 全く反対! –
ソートが使用されていません – oswaldomm2