FreeSql(31)サブ地域テーブル

パーティション

パーティションは、データファイルであり、インデックステーブルは、異なる物理的分散ファイルに格納されています。データテーブルは、N個の複数のブロックに分割され、これらのブロックは、同じディスク上にあることができる異なるディスク、異なる実装異なるデータベース上にあってもよいです。

そして、異なる点テーブルには、大きなテーブルのパーティションの後、彼は表だった、テーブルを2つになっていませんが、彼のブロックは、データを格納し、よりになります。パーティションの概念は、私は、ディスクI / Oのボトルネックを突破したいと思うデータベースのパフォーマンスを向上させるために識字ディスクを改善したいです。

パーティションの実装では、パーティションテーブルの確立、テーブル通常建て根、何の違い比較的簡単ではありませんし、コードの開発を終了する透過的です。

上記の表関数は、自動分割点をpostgresql10。

図1は、最初のプライマリパーティションテーブルを作成します。

create table fenbiao(
id int,
year varchar
) partition by list(year)

今年列データサブテーブルに従って、ここで設定されている。作成後に見えなく使用Navicatは、

2.ポイントテーブルを作成します。

create table fenbiao_2017 partition of fenbiao for values in ('2017');
create table fenbiao_2018 partition of fenbiao for values in ('2018');

あなたがルールに準拠していないデータを挿入する場合には、このようなデータは、異なる点テーブルに挿入されたこの2日間のルールに依存し、それがエラーを報告しません。関係のないパーティションを行が見つかり、「fenbiao」。

ポイントテーブル

用語は、表面部品表を意味する、すなわち、小さなテーブルがそれぞれ正完成テーブルであり、N小さな複数のテーブルにテーブルです。部品表データは、サマリテーブルは、一部のテーブルの代わりに、データにアクセスし、単にハウジング、サブテーブルに格納された後。

部品表の同時実行が単一のテーブルを改善した後に、ディスクI / O性能が向上します。高い並行性が現れる場合には、短縮を検索するために時間がかかるため、なぜ並行性は、異なるクエリ、内部の異なる小さなテーブルへの同時の圧力に応じて、全テーブルをそれを改善します。

サブテーブルサブライブラリー

元々のライブラリーの複数に格納されたブロックライブラリに格納されたサブライブラリーサブテーブルデータを、複数のテーブルにブロック上の表に元々格納されているサブデータ。

データベース内のデータの量がより多くなり、開発時間とビジネスライブラリテーブルと、サブライブラリーサブテーブルがない場合に、必ずしも制御可能ではなく、テーブル内のデータの量がますますなり従って、より大きなデータ操作、CRUDオーバーヘッドが成長され、また、サーバ・リソース(CPU、ディスク、メモリ、IOなど)が制限され、データベースは、データの最終的な量を運ぶことができますデータ処理能力がボトルネックにヒットします。

ポイントテーブルのFreeSql.Repository

FreeSql非安定部のテーブルは、基本的な方法を提供し、共有タイプテーブル記憶がパッケージ(クロスをサポートしていないサブライブラリサーバ)サブライブラリー画分を用いて実現されるようにGuidRepository。

var logRepository = fsql.GetGuidRepository<Log>(null, oldname => $"{oldname}_201903");

私たちは時系列ログ格納ポイントテーブルを取得の上、最終的にCURD操作Log_201903テーブル使用されます。

注意事項:

  • あなたは、まだログテーブルを移行することができ、CodeFirst移行ポイントテーブルを使用できない場合開発環境。
  • サブライブラリーにおける「遅延ロード」エンティティタイプパーツテーブルを使用しないでください。

クロステーブルのクエリ

var sql = fsql.Select<User>()
    .AsTable((type, oldname) => "table_1")
    .AsTable((type, oldname) => "table_2")
    .AsTable((type, oldname) => "table_3")
    .ToSql(a => a.Id);

SQLを取得します。

select * from (SELECT a."Id" as1 FROM "table_1" a) ftb 
UNION ALL
select * from (SELECT a."Id" as1 FROM "table_2" a) ftb 
UNION ALL
select * from (SELECT a."Id" as1 FROM "table_3" a) ftb

マルチテーブルクエリ:

var sql = fsql.Select<User>().LeftJoin<UserGroup>((a,b) => a.UserGroupId == b.Id)
    .AsTable((type, oldname) => oldname + "_1")
    .AsTable((type, oldname) => oldname + "_2")
    .AsTable((type, oldname) => oldname + "_3")
    .ToSql(a => a.Id);

より発散期待しています。

非安定を使用して

var sql = fsql.Select<User>()
    .AsTable((a, b) => "(select * from tb_topic where clicks > 10)")
    .Page(1, 10).ToList()

おすすめ

転載: www.cnblogs.com/FreeSql/p/11531435.html