7

常に一意のキーでアクセスされる大きなテーブル (約 450 億行) を作成したいと考えています。

DB の外では、これを保持するのに最適な構造は Dictionary または HashSet ですが、もちろんデータのサイズが原因で、データベースの外でこれを行うことはできません。

SQL Server は、キーと値のアクセス用に最適化された構造を提供しますか? クラスター化されたキーが非常に高速であることは理解していますが、それでもインデックスであるため、インデックス ページのトラバースに関連する追加のディスク読み取りが発生します。SQL Server から取得したいのは、データをキーと値のペアとして格納し、キーに基づいて値にアクセスできるようにする "ネイティブ" 構造です。

つまり、私の質問は、450 億行を SQL Server に格納し、クラスター化または非クラスター化されたインデックスを使用せずにそれらに効率的にアクセスする方法です。一意のキーによってアクセスされる場合、キーのハッシュが値の物理的な場所に解決される構造を持つことが可能である必要があります。1 つの値を取得するには、1 回の読み取りを行う必要があります (ハッシュの衝突がない限り)。

(Oracle の同等物は Hash Cluster です)

ご協力いただきありがとうございます。

4

2 に答える 2

3

SQLサーバーにはそのようなことはありません。あなたの唯一のオプションはインデックスです。特定のキーに対してすべての列を要求する場合は、クラスター化インデックスを使用する必要があります。サブセットのみを要求する場合は、次のように、必要な列のみを含む非クラスター化インデックスを使用する必要があります。

  create index IX_MyBigTable on MyBigTable(keyColumn) include (col1, col2, col3youneed);

これはかなり効率的になります。

于 2012-04-04T18:06:34.333 に答える
0

私のベンチマークによると、最善のアプローチは、キーのハッシュ列を作成することです。詳細

于 2013-01-29T11:09:46.850 に答える