各行がレコードを表すテーブルがあり、いくつかの列があるとします。任意の列で高速なクエリと並べ替えを実行したい。どのようなデータ構造を使用できますか?
省スペースを実現したい。それ以外の場合は、クエリと並べ替えのために各列に並べ替えられた結果をキャッシュできます。しかし、テーブル自体以外に消費するスペースを減らすにはどうすればよいでしょうか?
各行がレコードを表すテーブルがあり、いくつかの列があるとします。任意の列で高速なクエリと並べ替えを実行したい。どのようなデータ構造を使用できますか?
省スペースを実現したい。それ以外の場合は、クエリと並べ替えのために各列に並べ替えられた結果をキャッシュできます。しかし、テーブル自体以外に消費するスペースを減らすにはどうすればよいでしょうか?
これは基本的に、データベース プログラミングに関する質問です。列ごとに 1 つのインデックスが必要になります (この回答の残りの部分では、単一のインデックスについて話しているふりをします。必要に応じて、これらすべてを数回行うことを想像してください)。一般的なソリューションには、ハッシュ テーブルと検索ツリー (B ツリーなど) が含まれますが、もちろん、すべての列エントリを含む単純なソリューションは特にスペース効率がよくありません。
その答えは、スパースインデックスを作成することです。レコードをブロックにグループ化し、各ブロックから最も低い検索キーを持つレコードのみをインデックスに格納します。病的な状況 (非常に低い値が常に追加される) でない限り、これにより、少ないスペース要件でまともなパフォーマンスが得られます。
異常な状況に対処するために、レコードをブロックにグループ化するさまざまな方法を検討できます。たとえば、まだインデックスが作成されていないレコードをまとめて保持し、それらのグループのみをグループにコミットする (そしてインデックスを作成する) などです。検索キーの点でどこにもないサブセットを見つけることができるときはいつでも。
(これらは単なるアイデアです。私はデータベースのプログラマーというよりは、データベースのユーザーです。私よりも多くのことを知っている人々によって実際に何が行われたかを調べるために、いくつかの調査を試みてください。)