3

SQL Server 2005 で、一意の ID 列 (一意のインデックスを持つ) と主キーのクラスター化インデックスを持つテーブルに遭遇しました (したがって、この列には明示的に 2 つのインデックスがあります)。これは、このテーブルの挿入/更新/削除の主要なパフォーマンス要因ですか?

ずっと前に作成されたデータベースのパフォーマンスを向上させようとしていますが、そのような冗長な一意のインデックスを削除すると役立つのではないかと思います。データベースは、コンテンツが変更されるたびにこれらの両方のインデックスをチェック/再構築しますか? それとも、パフォーマンスの向上が小さすぎて、これを気にすることさえできませんか?

次に、インデックスの使用状況の出力例を示します。

INDEX   UserSeeks    UserScans  UserLookups UserUpdates
--------------------------------------------------------
1_PK    45517046      42911     245353       0
1_UQ    45517046      42911     245353       0
1_Other 45517046      42911     245353       0   
--------------------------------------------------------
2_PK    21538111      5685      231030      1121
2_UQ    21538111      5685      231030      1121
3_other 21538111      5685      231030      1121

そして、これがそのデータを取得するために使用したクエリです。

SELECT OBJECT_NAME(I.OBJECT_ID) AS ObjectName,
   I.NAME AS IndexName,
   S.user_seeks AS UserSeeks,
   S.user_scans AS UserScans,
   S.user_lookups AS UserLookups,
   S.user_updates AS UserUpdates
FROM sys.indexes I 
JOIN sys.dm_db_index_usage_stats S
  ON (S.OBJECT_ID = I.OBJECT_ID)
WHERE(database_id = DB_ID())

そして、結合条件を修正しました:

SELECT OBJECT_NAME(I.OBJECT_ID) AS ObjectName,
   I.NAME AS IndexName,
   S.user_seeks AS UserSeeks,
   S.user_scans AS UserScans,
   S.user_lookups AS UserLookups,
   S.user_updates AS UserUpdates
FROM sys.indexes I 
JOIN sys.dm_db_index_usage_stats S
  ON (S.OBJECT_ID = I.OBJECT_ID)
  AND(S.index_id = I.index_id)
WHERE(database_id = DB_ID())
4

2 に答える 2

4

それは冗長なインデックスではないかもしれません。

sのみを含むはるかに狭い非クラスター化インデックスを持つIDことは、特定のクエリに利益をもたらしたり、外部キーの検証をより効率的にしたりするための意図的な戦略としてそこに置かれている可能性があります。

ここでの回答で、OP が抱えていたデッドロックの問題を (成功裏に)解決するためのアプローチを提案しました。

于 2012-10-25T16:11:58.050 に答える
0

一般に、インデックスは更新/挿入/削除のパフォーマンスと引き換えに、選択のパフォーマンスを向上させます。それはほとんど常に良いことです。

データベースは、コンテンツが変更されるたびにこれらの両方のインデックスをチェック/再構築しますか?

そうしないと、インデックスが古くなり、間違った結果が返されます。

それとも、パフォーマンスの向上が小さすぎて、これを気にすることさえできませんか?

それは、テーブルでのアクティビティによって異なります。

一意の制約にも機能があります。列を一意に保ちます。インデックスなしでは一意の制約を設定できないため、それを削除することはオプションのようには見えません。

于 2012-10-25T16:10:13.663 に答える