使用されるデータ型と、行内のデータ量の密度によって、スパース列の有効性が決まります。テーブルのすべてのフィールドに値が設定されていると、実際にはこれらの行の格納にかかるオーバーヘッドが増え、その最大ページサイズをより高速に設定できます。その場合は、スパース列を使用しないでください。
静的データ型から可変長データ型(varchar、nvarchar、varbinary)に変換できるデータの数を確認します。可変長フィールドをオーバーフローページに入れることができるので、オーバーフローページへのポインタのオーバーヘッドは24バイトになります。私はあなたがスパース列が30K列を格納できるようになると思っていると思っていたと思う...これは、ほとんどの列がNULLである広いテーブルを持っていた状況に過ぎません。
MongoDBはあなたの答えにはなりません。少なくとも、多くのリファクタリングが必要です。既存のストアドプロシージャを活用することはできません。それはあなたに最も適しているかもしれませんが、MongoDBに移動する際には多くのことを考慮する必要があります。 JSONドキュメントとしてリレーショナル構造にデータを永続させない限り、データアクセスレイヤーを再構築する必要があります。私はそうではないと仮定します。
私はあなたが広いテーブルを持っていると仮定しています、そして、それらは密集しています...その仮定に基づいてここに私の推薦です。
Vladimirが提案しているようにテーブルを分割しますが、これらのテーブルをすべて結合して1つのテーブルに見せるビューを作成します。今あなたは以前と同じ構造をしています。次に、代わりにトリガをビューに追加して、テーブルを更新します。これは、コードの大きなリファクタリングを行うことなく、必要なものを得ることができる方法です。トリガーのために追加する必要があるコードがありますが、それは簡単に書くことができ、ほとんどの場合コードを書かずにすべてのビューのコードを生成するスクリプトを作成してからそれは繰り返しました。
合意されましたが、私は今のところテーブルの863列しか持っていません。しかし、それは間違いを投げている。 – user2956568
あなたが打つ限界は、列の数ではなく、行あたり8060バイトです。私が考えることができる唯一の回避策は、1行あたりのバイト数が少ないいくつかのテーブルにテーブルを垂直に分割することです。 –
これは時間と労力によってコストがかかりすぎるか、テーブルをnosqlデータベースに移動してSQLストアドプロシージャを使用する方法がありますか? – user2956568