DB の保守戦略が切実に必要であることは承知しています。
その必要性を特定するための+1
私のバックグラウンドとしては、私はこの会社でアルバイトをしている大学生です。
勉強を続け、経験を積み、その間に経験豊富なコンサルタントを獲得してください。
テーブルには、それぞれ 4 つのスレッドを実行する 24 のワーカーが入力されます。
これは営業時間中は非常にミッション クリティカルであり、ダウンタイムは悪いニュースだと思いますか? もしそうなら、それで混乱しないでください。
ResultID と Fieldname にクラスター化インデックスがあります
あなたが示すように、ResultID は PK の最初の列ですか?
もしそうなら、私はそれが不十分に選択的であり、クエリのニーズが何であるかに応じて、PK フィールドの順序を交換する必要があると確信しています (この複合キーはクラスター化された PK には適していないように見えますが)。
結果は次のとおりです。
SELECT COUNT(*), COUNT(DISTINCT ResultID) FROM MyTable
たとえば、最初のカウントが 2 番目のカウントの 4 倍以上である場合、ResultsID の選択性が低いため、シークよりも優先してスキャンを取得する可能性が高く、いくつかの簡単な変更でパフォーマンスが大幅に向上します。
また、Fieldname は非常に広い (50 文字) ため、セカンダリ インデックスではすべてのインデックス エントリに 50 + 4 バイトが追加されます。フィールドは本当に VARCHAR ではなく CHAR ですか?
個人的には、リーフ ページの密度を上げることを検討します。90% では、ページに 1 つ程度の隙間しか残らないでしょう。ただし、5 億行の大規模なテーブルでは、パッキング密度が高くなると、ツリー内のレベルが少なくなり、検索のシークが少なくなる可能性があります。それに対して、特定のページのほぼすべての挿入には、ページ分割が必要になります。これはクラスター化された挿入を優先するため、適切ではない可能性があります (挿入データがおそらくクラスター化されていないことを考えると)。多くの場合と同様に、テストを行って、どのインデックス キー密度が最適かを確認する必要があります。SQL Server には、クエリがどのように解析されているか、クエリがキャッシュされているかどうか、テーブルのスキャンが何回発生しているか、どのクエリが "実行速度が遅い" かなどを分析するのに役立つツールがあります。
コンサルタントに見てもらい、アドバイスをもらいましょう。これは、ここで回答することで、実装する安全なソリューションが得られる質問ではありません。
5 億行を持ち、毎日の挿入負荷を削減するテーブルのメンテナンス ポリシーについては、本当に慎重に検討する必要があります。申し訳ありませんが、このような状態に陥る企業には非常に不満を感じています。
テーブルの最適化が必要です (クラスター化インデックスがないとオプションが少なくなるため、より適切な候補があると判断するまでそれを維持してください)。「オンライン」の最適化方法は、パフォーマンスにわずかな影響を与えますが、時間や CPU の制約を超えた場合は安全に中止できます [ただし、プログラミングが必要になる可能性が最も高い]。「静かな」スロットがある場合は、テーブルの最適化とインデックスの統計の更新に使用します。週末まで待ってすべてのテーブルを一度にやろうとしないでください - 毎日の静かな時間にできるだけ多く/多くのことをしてください (おそらく夜中)。
テーブルを最適化すると、トランザクション ログの使用量が大幅に増加する可能性があるため、TLog を頻繁にバックアップするようにしてください (10 分間の TLog バックアップ ポリシーがあり、テーブルの最適化中は 1 分ごとに増やして、最適化プロセスが実行されるようにします)。必要な Tlog スペースの定義にはなりません!)