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

Postgresql-大きなデータベースで配列を使用するパフォーマンス

    elementsを使用する必要があると思います 表:

    • Postgresは統計を使用して、クエリを実行する前に一致する行数を予測できるため、最適なクエリプランを使用できます(データが均等に分散されていない場合はより重要です)。

    • CLUSTER elements USING elements_id_element_idxを使用してクエリデータをローカライズできます。;

    • Postgres 9.2がリリースされると、インデックスのみのスキャンを利用できるようになります。

    しかし、私は1,000万個の要素についていくつかのテストを行いました:

    create table elements (id_item bigint, id_element bigint);
    insert into elements
      select (random()*524288)::int, (random()*32768)::int
        from generate_series(1,10000000);
    
    \timing
    create index elements_id_item on elements(id_item);
    Time: 15470,685 ms
    create index elements_id_element on elements(id_element);
    Time: 15121,090 ms
    
    select relation, pg_size_pretty(pg_relation_size(relation))
      from (
        select unnest(array['elements','elements_id_item', 'elements_id_element'])
          as relation
      ) as _;
          relation       | pg_size_pretty 
    ---------------------+----------------
     elements            | 422 MB
     elements_id_item    | 214 MB
     elements_id_element | 214 MB
    
    
    
    create table arrays (id_item bigint, a_elements bigint[]);
    insert into arrays select array_agg(id_element) from elements group by id_item;
    
    create index arrays_a_elements_idx on arrays using gin (a_elements);
    Time: 22102,700 ms
    
    select relation, pg_size_pretty(pg_relation_size(relation))
      from (
        select unnest(array['arrays','arrays_a_elements_idx']) as relation
      ) as _;
           relation        | pg_size_pretty 
    -----------------------+----------------
     arrays                | 108 MB
     arrays_a_elements_idx | 73 MB
    

    そのため、一方で配列は小さく、インデックスも小さくなります。決定を下す前に、2億要素のテストを行います。




    1. postgresqlの要点インデックスタイプでuuidを使用する方法は?

    2. HQL-配列に値が含まれているかどうかを確認します

    3. SQLServerのテーブルにあるすべての外部キーを一覧表示する

    4. VistaDBの利点は何ですか