1
再帰的なSQLクエリのパフォーマンスの問題[終了]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? 質問を更新して、データベース管理者のスタック交換のトピックになるようにします。 4年前休業。 私がこの質問をするのはこれで6回目ですが、これも最短の質問です。これまでのすべての試みは、質問自体ではなくブログ投稿に類似したものでしたが、私の問題が本当であることを保証します。それは、1つの大きな主題に関するものであり、この質問に含まれるすべての詳細なしでは、私の問題が何であるか明確ではありません。だからここに行く... 概要 私はデータベースを持っています。これは、データをちょっと豪華な方法で格納することを可能にし、私のビジネスプロセスに必要ないくつかの非標準機能を提供します。機能は次のとおりです。 挿入のみのアプローチを介して実装された非破壊的で非ブロック的な更新/削除により、データの回復と自動ロギングが可能になります(各変更は、その変更を行ったユーザーに関連付けられます) マルチバージョンデータ(同じデータの複数のバージョンが存在する場合があります) データベースレベルの権限 ACID仕様およびトランザクションセーフな作成/更新/削除との最終的な整合性 データの現在のビューを任意の時点まで巻き戻しまたは早送りする機能。 私が言及し忘れていた他の機能があるかもしれません。 データベースの構造 すべてのユーザーデータはItems、JSONエンコードされた文字列(ntext)としてテーブルに保存されます。すべてのデータベース操作は2つのストアドプロシージャGetLatestを介して行われInsertSnashot、GITがソースファイルを操作する方法と同様にデータを操作できます。 結果のデータは、フロントエンドで完全にリンクされたグラフにリンク(結合)されるため、ほとんどの場合、データベースクエリを実行する必要はありません。 データをJsonエンコード形式で保存する代わりに、通常のSQL列に保存することもできます。ただし、全体的な複雑性の負担が増大します。 データの読み取り GetLatest命令形式のデータを使用した結果については、説明のために次の図を検討してください。 この図は、単一のレコードに対して行われた変更の進化を示しています。図の矢印は、編集が行われたベースのバージョンを示しています(ユーザーがオンラインユーザーによって行われた更新と並行して、一部のデータをオフラインで更新していると想像してください。 1つではなく)。 したがって、GetLatest次の入力タイムスパン内で呼び出すと、次のレコードバージョンが生成されます。 GetLatest 0, 15 => 1 <= The data is created upon it's first occurance GetLatest 0, 25 => 2 <= Inserting another version on top of first one …