2

SCCM データベースにクエリを実行して、ネットワーク全体で特定のソフトウェアを探しています。私の問題は、さまざまな理由で、プログラムの名前で検索できる場合もあれば、特定の EXE を検索する必要がある場合もあります。

以下のクエリを実行すると、where 句に AND が含まれている場合、実行に 13 秒かかりますが、AND が OR に置き換えられた場合、何日も実行されて結果が得られません。テーブルを適切に結合していないため、これを行っていると想定しています。どうすればこれを修正できますか?

select vrs.Name0
FROM v_r_system as vrs
join v_GS_INSTALLED_SOFTWARE as VIS on VIS.resourceid = vrs.resourceid
join v_GS_SoftwareFile as sf on SF.resourceid = vrs.resourceid

where 
VIS.productname0 LIKE '%office%' AND SF.Filename LIKE 'Office2007%'

GROUP BY vrs.Name0

ありがとう!

4

2 に答える 2

1

LIKEには、文字列の先頭にワイルドカード マッチが含まれています。

LIKE '%office%'

これにより、SQL Server がこの列のインデックスを使用できなくなり、クエリの実行が遅くなります。理想的には、クエリを変更して、LIKE句の最初にワイルドカードを使用しないようにする必要があります。

句に最初に句に基づくクエリWHEREが含まれている場合(ここではインデックスを使用できるため、これは比較的高速です)、次に、句に基づいてこの削減された行セットをフィルター処理します。ただし、を使用すると、句に一致する行を返すだけに制限されないため、テーブル全体を検索して、各フィールドが一致するかどうかを確認する必要があります。ANDFilenameproductname0ORFilenameproductname0

于 2011-09-09T16:05:48.237 に答える
1

インデックスの改善に関するMicrosoft の優れた記事http://msdn.microsoft.com/en-us/library/ms172984.aspxを次に示します。フィルター句を含むインデックスのセクションを参照してください (前の回答を繰り返します)。

同様のクエリの代わりに、これらの行に沿って何かを試しましたか?

... ('Microsoft Office 2000','Microsoft Office xyz','Whateverelse') の製品名

于 2011-12-08T00:36:24.587 に答える