0

インデックスはデータアクセスのパフォーマンスを向上させます。インデックスを作成してみましたが、時間の消費に違いはありませんでした。私はここで何かが欠けていますか?

私のスキーマは次のようになります。(49列)。Id-PrimaryKey(クラスター化インデックス)

Id | Name | Age | CountryId | CourseId | ....... | EnrolledOn

テーブルには約425,000のレコードがあります。国とコースがレコードのフィルタリングに使用される列であることを考慮して、これら2つの列で構成される複合インデックスを作成しました(これらの2つの列は外部キーです)。

次のクエリを試しました。

Select * From Students Where CountryId = 1 And CourseId = 1

インデックスがない場合とインデックスがある場合、クエリには11秒かかりました。

注:約415,000レコードが上記の条件に一致します。これが、消費時間に差がない理由になるのでしょうか。

誰かがこれについて私を助けることができますか?

CREATE NONCLUSTERED INDEX IX_Country_Course ON Students(CountryId,CourseId)
4

2 に答える 2

1

テーブルからほぼすべての行を要求した場合、インデックスはほとんど機能しません。その場合、インデックスにあるフィールドのみを選択した場合にのみ高速化されるため、要求されたすべてのデータを取得するために元のテーブルは必要ありません。

したがって、countryidのみを選択すると、上記の問題の場合にいくつかの利点が見られる可能性があります

于 2012-10-11T13:06:23.460 に答える
1

クエリではなく*、選択する列のみを明示的に指定し、それらの列をincluded columns..としてインデックスに含めます。これにより、選択時間が短縮されます。

インデックス内の列の順序が重要であることをご存知だと思います。

于 2012-10-11T12:58:11.337 に答える