none
インデックス領域 RRS feed

  • 質問

  • ご教授お願いします。

    SQLserver2008です。

    さて、品目マスタというテーブルを作成しました。

    そこに約50000件のレコードを登録し

    当テーブルから直接上位1000行の選択を指定してレコードを確認しその時はすぐに表示されたのですが

    Top1000を外して再実行したら全レコード表示まで17秒かかりました。

    他のテーブル(レコード件数60000件)で同様に実行したら3秒で全件表示されました。

    品目マスタと他のテーブルの違いを見てみたらテーブルのプロパティでインデックス領域が6.797MBと

    他のと(他は0.008MB)と大きな差がありました。多分この影響で表示までに時間がかかりすぎているのかと

    思われるのですが、こお領域を減らす方法をお願い致します。

    以上

     

    2011年2月9日 23:13

回答

  • インデックスの領域を減らすのであれば、インデックスの削除を行えば可能ですが、
    問題の本質はTopをつけたときとつけていないときのプランの差にあるかもしれません。
    まずは早いときと遅いときの実行プランを比較してみてはいかがでしょうか。

    http://msdn.microsoft.com/ja-jp/library/ms178071.aspx

     

    • 回答としてマーク 山本春海 2011年2月28日 8:18
    2011年2月9日 23:46
    モデレータ
  • インデックス領域は必要な分だけ使われているはずなので、減らすにはインデックスの削除や、インデックスに含める列を減らすことが対処になります。

    ただ、私もこの問題はインデックスの領域とは直接は関係ないと思います。

     

    全件表示させる場合には、いずれにせよTable Scanもしくは Clustered Index Scan といった、全てのデータをScan するという実行プランになっているはずです。

    そこで差が出るとすると、単純に読み取りページ数が多くて、時間がかかっていることが考えられます。下記のように、statistics io を on にした後に、select を実行すると、論理読み取り数、物理読み取り数といった読み取りページ数が表示できるので、品目マスタとその他のテーブルで、比較してみると違いがあるかもしれません。

     

    set statistics io on

    select * from table

     

    読み取りページ数が品目マスタで多いということであれば、列数が多いとか、列に含まれるデータのサイズが大きいという話だと思います。

    • 回答としてマーク 山本春海 2011年2月28日 8:18
    2011年2月10日 12:35

すべての返信

  • インデックスの領域を減らすのであれば、インデックスの削除を行えば可能ですが、
    問題の本質はTopをつけたときとつけていないときのプランの差にあるかもしれません。
    まずは早いときと遅いときの実行プランを比較してみてはいかがでしょうか。

    http://msdn.microsoft.com/ja-jp/library/ms178071.aspx

     

    • 回答としてマーク 山本春海 2011年2月28日 8:18
    2011年2月9日 23:46
    モデレータ
  • インデックス領域は必要な分だけ使われているはずなので、減らすにはインデックスの削除や、インデックスに含める列を減らすことが対処になります。

    ただ、私もこの問題はインデックスの領域とは直接は関係ないと思います。

     

    全件表示させる場合には、いずれにせよTable Scanもしくは Clustered Index Scan といった、全てのデータをScan するという実行プランになっているはずです。

    そこで差が出るとすると、単純に読み取りページ数が多くて、時間がかかっていることが考えられます。下記のように、statistics io を on にした後に、select を実行すると、論理読み取り数、物理読み取り数といった読み取りページ数が表示できるので、品目マスタとその他のテーブルで、比較してみると違いがあるかもしれません。

     

    set statistics io on

    select * from table

     

    読み取りページ数が品目マスタで多いということであれば、列数が多いとか、列に含まれるデータのサイズが大きいという話だと思います。

    • 回答としてマーク 山本春海 2011年2月28日 8:18
    2011年2月10日 12:35