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

インデックス作成のパフォーマンス BigInt vs VarChar

    必ずする必要があります サロゲート INT IDENTITY() を導入する 主キー!!INTはすでに最大20億行を提供する可能性があります-それで十分ではありませんか??

    SQL Server のこの主キー/クラスター化キーのサイズは最大 64 バイト (INT の場合は 4 ではなく) になります。これにより、クラスター化インデックスとすべての非クラスター化インデックスが認識できないほど肥大化します。クラスタリング キー全体 (8 列すべて) が、そのテーブルのすべての非クラスタ化インデックスのすべてのページに含まれます。これは、確実に大量のスペースを無駄にします。

    したがって、特定のインデックス テーブルでは、サロゲート INT クラスター化キーを使用して最大 16 倍のエントリを持つことになります。つまり、I/O が大幅に減り、インデックス ページの読み取りに費やされる時間が大幅に短縮されます。

    そして、そのテーブルへの外部キー関係を確立しようとすることを想像してみてください....どの子テーブルにも 8 列 すべてが必要です。 主キーを外部キー列として、すべての結合で 8 つの列すべてを指定します。なんて悪夢でしょう!!

    7,800 万行の場合、クラスタリング キーを INT IDENTITY に変更するだけでも、1 行あたり最大 60 バイト節約できます。それだけで、最大 4 GB のディスク容量 (およびサーバーの RAM 使用量) になります。そして、それは非クラスター化インデックスの節約を計算することすら始めていません........

    そしてもちろん、はい、VARCHAR(10) を INT または BIGINT に変更します。数値の場合は、フィールドの型を数値にします。VARCHAR(10) のままにしても意味がありません。しかし、それだけで速度やパフォーマンスに大きな違いが生じるわけではありません。データの操作がはるかに簡単になるだけです (値の比較などで、常に数値型にキャストする必要はありません)。 /P>

    マーク



    1. データベースの作成を解釈するときのOracleとMysqlの違いは何ですか?

    2. UPDATE実行時のPostgreSQLのデッドロック

    3. SQL Server:あるクエリに存在する行が別のクエリにない

    4. ポート5432でPostgresqlに接続できません