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

Postgres:オフセット/制限のある副選択でパフォーマンスが非常に悪いのはなぜですか

    SELECT句で表現された結合は、最終的なデータセットに含まれていない100000行に対しても実行されていると思います。

    これはどうですか:

    SELECT s2.user_id,
    (SELECT address_id FROM address a WHERE a.user_id = s2.user_id ORDER BY address_id OFFSET 0 LIMIT 1) AS a_id
    FROM (select *
          from   subscribers s
          ORDER BY s.user_id
          OFFSET 100000 LIMIT 200) s2
    

    それができない場合は、一般的なテーブル式を試してください:

    With s2 as (
      select *
      from   subscribers s
      ORDER BY s.user_id
      OFFSET 100000 LIMIT 200)
    SELECT s2.user_id,
    (SELECT address_id FROM address a WHERE a.user_id = s2.user_id ORDER BY address_id OFFSET 0 LIMIT 1) AS a_id
    FROM s2
    


    1. メインテーブルの値に基づいて、別のテーブルから2つの追加の列を選択するにはどうすればよいですか?

    2. Magentoのインストール-識別子名が長すぎます

    3. Aurora ServerlessMySQL5.6で区切り文字を使用する場合の構文エラー

    4. テーブルから最後のレコードIDを取得する最も安全な方法