2017-03-04 11 views
0

私は索引を探しています。私は索引付けの初心者です。冒険作品を使ってフォラリングを実行していれば索引を達成できますか? 。私は、インデックスがクエリ実行プランを見て追求取得していないようですデータを検索するための最良の方法

create index IX_ModifiedOn on [dbo].[person] (ModifiedDate Asc) 

select BusinessEntityID, FirstName, MiddleName, LastName, ModifiedDate 
from dbo.person 
order by ModifiedDate 

私は、次の非クラスタ化インデックスを作成しました。 ModifiedDateで注文するためのインデックスを作成するうそをつく方法を知りたいだけですか?

その主キーを使用すると、任意のフィルタなしで、表全体を選択するか、参加しているので、あなたがない限り、インデックスが求めて取得することはできませんあなた

+1

SQL Serverは必要に応じてインデックスを使用します。データが小さすぎる場合、オプティマイザは実際にソートを実行するのがインデックスを使用するよりも速いと判断することがあります。 –

+0

こんにちはGordan、本当にありがとう、私は実際に27million行の仕事でテーブル上でこれを試しています。私はちょうど同じプリンシパルをシミュレートするために冒険を使用しています。しかし、今度は、このようにして、modifiedDateでインデックスを検索することができますか? – abs786123

+0

あなたは 'where'または' join'を使わずに1つのクエリで2,700万行を選択していますか? – SqlZim

答えて

1

ありがとうございとしてもクラスタ化インデックスがBusinessEntityIDにありインデックスはクエリにも適用されます。それ以外の場合、エンジンはテーブルに戻って選択している列を取得する必要があります。これはあなたの例のカバー指数です。

create index IX_ModifiedOn on [dbo].[person] (ModifiedDate Asc) 
    include (BusinessEntityID, FirstName, MiddleName, LastName); 
+0

そのために、私はまだソートで90%のコストを得ています。それを減らすためにとにかくありますか?私はただテーブル全体を選択したいが、注文のコストを減らすことで – abs786123

+0

@ abs786123あなたの例は実際の状況を正確に記述していないかもしれない。これはAdventureworks上で 'sort'操作を生成しません。そのインデックスを作成した後の実行計画は次のとおりです。https://www.brentozar.com/pastetheplan/?id=H10-0jY9x – SqlZim

関連する問題