6

最近、データベースの微調整を行いました。SQL Server についていくつかのアイデアがあり、インデックスを作成することにしました。

これを参照 http://sqlserverplanet.com/ddl/create-index

INCLUDEしかし、オプションのような他のタイプのインデックスがどのように役立つかわかりませんWITH。Google を試してみましたが、それらをいつ使用するかについての簡単な説明が表示されませんでした。

CREATE NONCLUSTERED INDEX IX_NC_PresidentNumber
ON dbo.Presidents (PresidentNumber)
INCLUDE (President,YearsInOffice,RatingPoints)
WHERE ElectoralVotes IS NOT NULL

CREATE NONCLUSTERED INDEX IX_NC_PresidentNumber
ON dbo.Presidents (PresidentNumber)
WITH ( DATA_COMPRESSION = ROW )

CREATE NONCLUSTERED INDEX IX_NC_PresidentNumber
ON dbo.Presidents (PresidentNumber)
WITH ( DATA_COMPRESSION = PAGE )

上記を使用する必要があるシナリオは何ですか? それらはパフォーマンスを向上させますか?

4

2 に答える 2

4

データ圧縮はクエリのパフォーマンスにも役立ちます。圧縮後、クエリを実行すると、I/O が減少するため、ロードされるページ/エクステントが少なくなるため、I/O を減らすことは常に良い選択です。

于 2013-03-27T06:02:51.050 に答える
2

with datacompression オプションについて話すことはできませんが、Include オプションを使用すると確実にパフォーマンスが向上します。PresidentNumber と、1 つ以上の President、YearsInOffice、または RatingPoints 列のみを選択し、ElectoralVotes が null でない場合、クエリはインデックス自体から値を取得し、基になるテーブルに触れる必要はありません。テーブルに追加の列があり、そのうちの 1 つをクエリに含める場合は、テーブルとインデックスから値を取得する必要があります。


Select top 20 PresidentNumber, President, YearsInOffice, RatingPoints
From Presidents
where ElectoralVotes IS NOT NULL

上記のクエリは IX_NC_PresidentNumber からのみ読み取ります。クエリのすべての列がインデックスに含まれているため、Presidents テーブルからデータを取得する必要はありません。

Select top 20 PresidentNumber, President, YearsInOffice, PoliticalParty
From Presidents
where ElectoralVotes IS NOT NULL

このクエリでは、インデックス IX_NC_PresidentNumber と Presidents テーブルも使用します。これは、クエリの PoliticalParty 列がインデックスに含まれていないためです。

Select PresidentNumber, President, YearsInOffice, RatingPoints
From Presidents
Where RatingPoints > 50

クエリの where 句とインデックスで使用される where 句が一致せず、行数に制限がないため、このクエリはおそらくテーブル スキャンを実行することになります。

于 2013-03-27T05:45:43.173 に答える