質問: 初めて投稿いたします。よろしくお願いいたします。 SQLServer2014にて、某システムの既存のストアドで使用される、SQLのチューニングをやらせて頂いております。 チューニングとはいっても、作業としてはINDEXを作成や削除をしております。 早速本題についてなのですが、既存の処理の流れに、INDEXがPrimary Keyのみの1テーブルをREBUILDした後、当該テーブルにデータをINSERTしている箇所があります。 REBUILD前に、そのテーブルに対しCRUDを行っておらず、よってREBUILDするのはあまり効果がないように思えます。 もしREBUILDするのなら、せめてINSERTした後だと思います。 この処理は、月に1度実行するものなので、先月INSERTした分をREBUILDしている可能性はあります。 ちなみに、当該テーブルに対する処理としましては、REBUILD後、データをINSERTし、他テーブルがFROMであるSELECTのLEFT JOINにて使用されます。 皆様にお伺いしたい事は、上記の処理においてREBUILDする必要はあるのか、という事です。 もし更にお教えいただけるのでしたら、INDEXがPrimary KeyのみのテーブルにINSERTした場合、追加したデータのINDEXはどのようにリーフノードに割り振られるのかも併せてご説明頂けますと、大変ありがたく存じます。 以上です。ご回答の程、何卒よろしくお願い申し上げます。
回答: 月に一度、INSERTしかしないテーブルということでしょうか。 REBUILDして、INSERTという話ですが、FILLFACTORを設定しているなら意味はあるんじゃないでしょうか。 インデックスの間に入ることがあるのかどうか知りませんが、リビルドによってページに余裕を持たせることでページ分割の発生を予防しているのであれば意味はあるんじゃないかと思います。 どのように~というのは挿入するデータなど条件によりますし、ここで説明できる量じゃないと思いますのですみませんが私はパスします。 インデックスの断片化と再構築で調べればいろいろ出てくると思います。