2

SQLiteの64テーブル結合制限を超える12テーブルの多くの結合を含むSQLiteのクエリを生成することを計画しています。(〜250のテーブル結合または場合によってはそれ以上)これは最終的にAndroidで実行されます。この背後にある目的は、生成されているレポートに応じて、結果セットにX個のユーザー定義フィールドを含めることです。

残念ながら、私はDBAではなく、これを達成するための最適な方法を知りません。

これまでのところ、オプションは次のとおりだと思います。

  • 2つの一時テーブルを使用して、可能な最大量を結合しながら結果セットを調整します。(SQLServerでの以前のソリューション、かなり遅い)
  • いくつかの列の結果セットと、それらを結合してn一時テーブルに格納するためのキーを作成します。(n64未満の場合)次に、すべての一時テーブルを共通のキーで結合します。
  • 単一の一時テーブルを作成し、一度に1つの挿入または更新を埋めます。
  • 大きな結合を行わず、代わりに多くの選択を実行し、ある種のデータコンテナを埋めます。

他に考慮すべきことはありますか?

4

3 に答える 3

3

マイクの回答に対するあなたのコメントによると、「レポートを生成するためのクエリは、何度も参加して再参加する必要があります」。

多くの場合、レポートを処理するときは、クエリを一口サイズのチャンクに分割し、必要に応じて中間結果を一時テーブルに保存する必要があります。

また、あなたの質問は、あなたがエンティティ/属性/値ストアを持っていて、全体をピボットしようとしているように聞こえます。もしそうなら、それがおそらくあなたの問題の原因であるため、このデザインのアンチパターンを使用して再検討することをお勧めします。

于 2011-05-16T13:08:35.503 に答える
3

それほど多くのテーブルを結合しようとしているときに、リレーショナルデータベースプラットフォームで「高速」になることはできないと思います。あらゆる種類の組み込み最適化により、ゴーストはあきらめられます。クエリで10個ものテーブルを見たときに、デザインを確認する可能性があります。

スキーマ設計を再検討する必要があると思います。スキーマ内の250以上のテーブル(電話で!)は私には意味がありません-私は200GB以上のデータを使用して単一のDBで複数のエンタープライズアプリを実行していますが、まだ84のテーブルしかありません。そして、私はそれらすべてに参加することはありません。すべてのテーブルに異なる列がありますか?本当に違う?からいくつかのエントリを投稿できますsqlite_masterか?

于 2011-05-05T17:01:52.603 に答える
2

アプリはAndroidデバイスで実行されているので、どこかのサーバー上のエンタープライズクラスのデータベースと同期すると思います。実際の解決策は、デバイスデータベース上のサーバーデータの非正規化された表現を生成することです。これにより、より簡単にアクセスできるようになります。

于 2011-05-11T13:08:39.997 に答える