sql >> データベース >  >> RDS >> PostgreSQL

PostgreSQL:巨大なグラフを保存およびクエリするためにデータベースを最適化する方法

    これは、ディスク上の同じキーレコードの「密度」が原因だと思います。同じIDのレコードは密に保存され(つまり、ブロック数が少ない)、同じリンクを持つレコードはスパースに保存されると思います(つまり、 、膨大な数のブロックに分散されます。IDの順序でレコードを挿入した場合、この状況が発生する可能性があります。

    それを仮定します:1。 10,000件のレコードがあります2。 (id、link)=(1、1)、(1、2)、...、(1、100)、(2、1)...、3のような順序で保存されます。 1つのブロックに50レコードを保存できます。

    上記の仮定では、ブロック#1〜#3は、レコード(1、1)〜(1、50)、(1、51)〜(1、100)および(2、1)〜(2、50)で構成されます。それぞれ。

    SELECT * FROM edges WHERE id=1の場合 、2ブロック(#1、#2)のみがロードおよびスキャンされます。一方、SELECT * FROM edges WHERE link=1 行数が同じでも、50ブロック(#1、#3、#5、...)が必要です。



    1. PHP-PDOは、列をインデックス、列を値として結果セットをフェッチします

    2. PostgreSQLでのtimezone()関数のしくみ

    3. 複数のID値を受け入れるT-SQLストアドプロシージャ

    4. PostgreSQLのLISTAGG(Oracleデータベース)に相当するものは何ですか?