0

調整する SQL 選択クエリがあります。クエリには、4 つのテーブルから形成された View in from 句があります。このクエリが実行されると、これら 4 つのテーブルすべてでフル テーブル スキャンが実行され、CPU スパイクが発生します。4 つのテーブルには有効なインデックスが構築されています。

クエリは次のようになります。

SELECT DISTINCT ID, TITLE,...... 
FROM FINDSCHEDULEDTESTCASE 
WHERE STEP_PASS_INDEX = 1  AND LOWER(COMPAREANAME) ='abc'   ORDER BY ID;

ドットは、さらに多くの列があることを示しています。ここで、FINDSCHEDULEDTESTCASE は 4 つのテーブルのビューです。

これらの 4 つのテーブルでフル テーブル スキャンを回避する方法を教えてもらえますか。

4

2 に答える 2

2

いずれにせよ、あなたの条件を使用して

AND LOWER(COMPAREANAME) ='abc'

各値関数に対して LOWER を計算する必要があるため、COMPAREANAME 値の完全なスキャンが行われます。

于 2012-07-04T20:32:27.327 に答える
1

それは非常に多くのものに依存します!

SELECT DISTINCTG ID, TITLE, ......

選択する列の数によっては、SQLServerがインデックスを使用する代わりにテーブルスキャンを実行することを決定する可能性があります。

また、「WHERE」条件に応じて、SQLServerはインデックスを使用する代わりにテーブルスキャンを実行することも決定できます。

どのバージョンのSQLServerを使用していますか?

たとえば、「WHERE」の条件が行の50%未満を表し、SQL 2008を使用している場合、テーブルのインデックスを改善する方法があります。(フィルター処理されたインデックスhttp:// msdn.microsoft.com/en-us/library/ms188783.aspx

または、ビューにインデックスを作成することもできます(http://msdn.microsoft.com/en-us/library/ms191432.aspx) 。

あなたの質問には、本当にあなたを助けることができるほどの詳細が本当にありません。

于 2012-07-04T17:38:59.957 に答える