私はインデックスの専門家ではありません。今、いくつかの資料を調べています。
とにかく、3年にわたる700万レコードのテーブルがあるとします。ただし、最も一般的なクエリは、整数フィールド(Unixエポック時間)を使用して、過去3か月間を言います。
この3か月のクエリは通常約18秒かかります---しかし、他の多くのクエリがその上に構築される可能性があるため、高速化を図っていました。私はunix_Epoch_time intフィールドにクラスター化インデックスを作成しましたが、これは最終的に「where」ステートメントフィルターに含まれます。
ただし、これによりクエリ時間が短縮されたようには見えません。これは、このクラスター化インデックスが偽りの無駄であることを意味しますか?または、クエリ時間の1%程度を占めていますか?もっと速くなると思いました。
クラスタ化インデックスが無駄であるかどうかを尋ねます:理想的には、クラスタ化インデックスは一意であり、比較的小さく、一度作成すると変更されません( https://www.red-gate.com/simple-talk/sql/learnを参照)。 -sql-server/effective-clustered-indexes / )あなたの整数フィールドは確かに小さいですが、質問からは言えませんが、私のフィールドは一意ではないと思います。
質問に答えるには、IDENTITY(1,1)をクラスター化インデックスキーとして使用し、Unix時間フィールドを使用して非クラスター化インデックスを作成します。クエリを高速化するために、非クラスター化インデックスの一般的に使用される列を含めることができ、クエリがインデックスでカバーされている場合、メインテーブルにアクセスする必要さえありません。
また、過去3か月のデータを特定の日付範囲で定義できる場合は、フィルター処理されたインデックスを作成して、インデックスのサイズを制限し、検索を高速化することもできます。 1m +行のテーブルでの経験に基づいて、インデックス作成を制御している場合、ほとんどのクエリを1秒未満で満たすことができるはずです。