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

Postgresqlによる効率的な最新のレコードクエリ

    データモデルを変更したくない場合は、DISTINCT ONを使用できます。 「a」の各エントリについて、テーブル「b」から最新のレコードをフェッチするには:

    SELECT DISTINCT ON (a.id) *
    FROM a
    INNER JOIN b ON a.id=b.id
    ORDER BY a.id, b.date DESC
    

    クエリで「並べ替え」を避けたい場合は、次のようなインデックスを追加してください 助けてくれますが、よくわかりません:

    CREATE INDEX b_id_date ON b (id, date DESC)
    
    SELECT DISTINCT ON (b.id) *
    FROM a
    INNER JOIN b ON a.id=b.id
    ORDER BY b.id, b.date DESC
    

    または、テーブル「a」のレコードを何らかの方法で並べ替える場合:

    SELECT DISTINCT ON (sort_column, a.id) *
    FROM a
    INNER JOIN b ON a.id=b.id
    ORDER BY sort_column, a.id, b.date DESC
    

    代替アプローチ

    ただし、上記のすべてのクエリは、参照されているすべての行を読み取る必要があります。 テーブル「b」からのデータなので、データが多い場合でも、速度が遅すぎる可能性があります。

    a.idの最新の「b」レコードのみを保持する新しいテーブルを作成できます。 -または、それらの列を「a」テーブル自体に移動することもできます。



    1. 従業員部門ごとに5人以上の従業員数

    2. XMLの最初からmySQLに保存するようにコードを編集するにはどうすればよいですか?

    3. MySQLにCSVストレージエンジンを使用するのはいつですか?

    4. Postgresql&psycopg2:データベースが存在しません