ブール列がインデックスの検索にあまり役立たないことについて読んだことがあります..しかし、私の質問は..クラスター化されたインデックスがレコードの物理的な配置に影響を与える場合、それを使用してレコードのタイプをすべてまとめて配置することはできません(同じページで)それらのページがメモリにロードされる可能性が少なくなるように..もっとよく説明しようとします:テーブル
[BookPages]
ID(int)
Deleted(Boolean)
Text(Varchar)
クラスター化インデックスがID
列にある場合、サンプル データは次のようになります。
1, true, 'the quick..'
2, false, 'hello w..'
3, true, 'stack m..'
4, false, 'just thin...'
これは、削除/アクティブなレコードがインターリーブされていることを意味するため、レコード 2 を検索すると
SELECT [Text] FROM [BookPages] WHERE [Deleted] = false AND [ID] = 2
「リーフ」データページは行 (1,2) で終わる可能性があります。これは、削除されたフィールドを持つレコードをメモリにロードしていることを意味しますDeleted,ID
。データは今
2, false, 'hello w..'
4, false, 'just thin...'
1, true, 'the quick..'
3, true, 'stack m..'
ここで、SQL がページをロードするときにアクティブなレコードのみをターゲットにすると、アクティブなレコードだけでページがいっぱいになります。
したがって、長い歴史と多くの削除されたレコードを持つデータベースでは、必要なレコードの局所性を高め、IO を支援できます。
また、何千ものページで、それらの大部分がメモリにロードされることは決してなく、そのデータは常にディスクにのみ残るようにすることができます。
この推論は正しいですか?これは、大規模なデータベースの全体的なパフォーマンスに影響を与える (改善する) 可能性がありますか?