SQLite の制限を読んでも、SQLite データベース ファイルが保持できるテーブルの最大数を見つけることができませんでした。だから、私は知りたいです
- SQLite データベースが保持できるテーブルの最大数はありますか?
- SQLite データベース ファイルに何千もの小さなテーブルがあるのは問題ですか?
- SQLite データベース ファイル内の多くのテーブルは、クエリのパフォーマンスに影響を与える可能性がありますか?
SQLite の制限を読んでも、SQLite データベース ファイルが保持できるテーブルの最大数を見つけることができませんでした。だから、私は知りたいです
SQLite の制限のリストは、このページに記載されています。データベースごとのテーブルの最大数は指定されていないため、SQLite によって実装される制限はおそらくありません。JOIN ごとに 64 テーブルの制限があります。
4. 結合内のテーブルの最大数
SQLite は、64 を超えるテーブルを含む結合をサポートしていません。この制限は、SQLite コード ジェネレーターがクエリ オプティマイザーで結合テーブルごとに 1 ビットのビットマップを使用するという事実から生じます。
SQLite は効率的なクエリ プランナー アルゴリズムを使用するため、大規模な結合でもすばやく準備できます。したがって、結合内のテーブル数の制限を増減するメカニズムはありません。
15. スキーマ内のテーブルの最大数
各テーブルとインデックスには、データベース ファイル内に少なくとも 1 ページが必要です。前の文の「インデックス」は、CREATE INDEX ステートメントを使用して明示的に作成されたインデックス、または UNIQUE および PRIMARY KEY 制約によって作成された暗黙のインデックスを意味します。データベース ファイルの最大ページ数は2147483646 (20 億強) であるため、これはスキーマ内のテーブルとインデックスの数の上限でもあります。
データベースが開かれるたびに、スキーマ全体がスキャンおよび解析され、スキーマの解析ツリーがメモリに保持されます。つまり、データベース接続の起動時間と初期メモリ使用量は、スキーマのサイズに比例します。
テーブルの構造は同一ですか? その場合、一般的に、それらを識別列を持つ単一のテーブルに格納することをお勧めします。
テーブルの数は、データベースのサイズによってのみ制限されると思います。1 つの SQLite データベースには、最大で 2,147,483,646 ページを含めることができます。したがって、それは単一の SQLite データベース内のテーブルの最大数でもあると思います。
これは、データベース ページがテーブルにのみ使用されるという仮定に基づいていますが、これはおそらくあまり有用な仮定ではありません。
質問 2 と 3 に答えるために、同様の構造を持つ複数のテーブルを持つことはデータベースの正規化の原則に反しますが、単一のテーブルまたは仮想テーブルよりも優先される多くの実際的な理由があります。もちろん、SQLite よりも最大のものです。列よりもテーブルを削除する方がはるかに簡単です。また、単純なアプローチを取り、「適切な」正規化されたリレーショナル テーブルを実行しない場合、単一のテーブルのすべての行に「tableX」を配置するよりも占有するスペースが少なくなります。
パフォーマンスに関しては、「テーブル」列に数十万のエントリがあり、その列にインデックスが付けられている単一のテーブルと比較して、数十万のテーブルを使用しても問題はありません。実際、その単一の正規化されたテーブルのインデックスは、SQLite が使用するテーブルのインデックス作成メカニズムよりもはるかに大きくなり、効率が低下する可能性があります。
以上のことをすべて言いましたが、変数名を変数に割り当てるために exec() を使用するのと同じように、プログラミングの初心者によくある間違いであり、単一の正規化されたテーブルにあるはずの複数のテーブルを作成するのと同じように、健全な良心をもってこの投稿を終了することはできません(仮想またはその他) は、データベース アーキテクチャの初心者によくある間違いです。どちらの領域でも、状況によっては exec または多数のテーブルを使用することが正しいオプションとなる場合があります。たとえば、データがすべて非常に類似しているが、データに対して結合をまったく行わないことが確実である場合は、多くのテーブルで問題ありません。似たような構造であるにもかかわらず、データがまったく無関係であることを実際に確認してください。