2016-04-28 4 views
2

なぜ私はこれを行うとき:SELECT FROM sys.dm_db_index_usage_statsが2つの行/テーブルを返すのはなぜですか?

SELECT OBJECT_NAME(OBJECT_ID) AS DatabaseName, last_user_update,* 
FROM sys.dm_db_index_usage_stats 
WHERE OBJECT_ID=OBJECT_ID('TestTableName') 

私はの記録ではなく、1を得るのですか?

last_user_updateを使用して、前回のクエリ呼び出しからのローカルキャッシュデータが最新のものか、またはテーブルが変更されたために古いものがあるかどうかを判断する予定です。

last_user_update列は、このクエリから返される両方のレコードで同じです。最初のレコードの値をそのまま使うことはできますか、それとも違うかもしれませんか?結果については、以下

参照画面キャプチャ:

Screen Capture of results

DatabaseName last_user_update database_id object_id index_id user_seeks user_scans user_lookups user_updates last_user_seek last_user_scan last_user_lookup last_user_update system_seeks system_scans system_lookups system_updates last_system_seek last_system_scan last_system_lookup last_system_update 
TestTableName 2016-04-27 07:53:51.740 5 939150391 1 0 101556 101557 6 NULL 2016-04-28 07:27:17.933 2016-04-28 07:27:17.927 2016-04-27 07:53:51.740 0 3 0 0 NULL 2016-04-27 07:52:49.203 NULL NULL 
TestTableName 2016-04-27 07:53:51.740 5 939150391 2 101559 3 0 6 2016-04-28 07:27:17.927 2016-04-26 17:31:21.200 NULL 2016-04-27 07:53:51.740 0 1 0 0 NULL 2016-04-27 18:21:53.977 NULL NULL 

答えて

5

1のIndexIdが、クラスタ化インデックスを表します。

indexidは2ですが、クラスタ化されていないインデックスです。

テーブルがヒープ(クラスタ化されたインデックスなし)として構成されている場合は、indexidが0と表示されることもありますが、これは実際にはインデックスではありませんが、その操作はこのビューに表示されます。

第2の質問について、クラスタ化されていないインデックスは、興味のあるすべての列をカバーしていますか? 列が更新されている場合は、クラスタリングされたインデックスの行を参照するだけで、NCIには影響を及ぼしますが、CIには影響しません。

この列には、更新が確実に行われたわけではなく、このインデックスを更新できる演算子を含む実行計画が最後に実行されたことだけが示されているので、誤検知を招く可能性があります。また、サービスを再起動するか、データベースがオフラインに設定された後に値がnullになります(自動クローズの場合と同様)。

+0

また、画面キャプチャではIndex_idが1(クラスタ化されたインデックス) – Shaneis

+0

@Shaneis私はそれを見ていませんでした。私は下のテキストを読んで、次の列に属する0を見たように見えます。ありがとう、編集されました。 –

+0

+1 "は、このインデックスを更新できるオペレータを含む実行計画が最後に実行されたことを示し、更新が確実に発生したわけではなく、サービスの再起動後に値がNULLになるか、自動クローズ)。 – TheGameiswar

関連する問題