sql >> データベース >  >> RDS >> Sqlserver

SQL サーバーはどのようにして推定行数を計算しますか?

    SQL Server 各インデックスを最大 200 に分割します 次のデータの範囲 (こちらから) ):

    通常、入力された値のほとんどは RANGE_HI_KEY に入ります .

    ただし、範囲内に入る可能性があり、これが分布の偏りにつながる可能性があります。

    これらのデータを (とりわけ) 想像してみてください:

    キー値行数

    1          1
    2          1
    3          10000
    4          1
    

    SQL Server 通常、2 つの範囲を構築します:1 3 へ および 4 これらの統計を作成する次の入力値に:

    RANGE_HI_KEY  RANGE_ROWS  EQ_ROWS  AVG_RANGE_ROWS  DISTINCT_RANGE_ROWS
    3             2           10000    1               2
    

    、つまり 2 を検索するとき 、 1 しかありません インデックス アクセスを使用することをお勧めします。

    3 の場合 範囲内に入ると、統計は次のようになります:

    RANGE_HI_KEY  RANGE_ROWS  EQ_ROWS  AVG_RANGE_ROWS  DISTINCT_RANGE_ROWS
    4             10002       1        3334            3
    

    オプティマイザは 3334 があると考えています キー 2 の行 インデックスへのアクセスはコストがかかりすぎます。



    1. -Xssと-XX:ThreadStackSizeの違いは何ですか?

    2. GROUPBYから最大値または最小値の行を取得します

    3. 時刻を 24 時間のミリタリー タイムとしてフォーマットしますか?

    4. Postgres pg_dumpは、毎回異なる順序でデータベースをダンプします