Postgresql如何实现?

Postgresql如何实现?,postgresql,Postgresql,鉴于下表: \d users Table "public.users" Column | Type | Modifiers --------------------+-----------------------------+---------------------------------------- id

鉴于下表:

\d users
                                   Table "public.users"
       Column       |            Type             |               Modifiers
--------------------+-----------------------------+----------------------------------------
 id                 | integer                     | not null
 email              | character varying           | not null default ''::character varying
 encrypted_password | character varying           | not null default ''::character varying
 created_at         | timestamp without time zone |
 address_id         | integer                     |

\d address
          Table "public.address"
  Column  |       Type        | Modifiers
----------+-------------------+-----------
 id       | integer           | not null
 street   | character varying |
 city     | character varying |
 province | character varying |
 zip      | character varying |
 country  | character varying |
  • 写一些SQL来选择居住在XXXX的所有用户
  • 现在,该查询的范围是由最新的first订购的创建时间超过3个月的用户吗

  • 什么索引可以提高此查询的性能
  • 第一个问题:

    select u.id, u.email
    from users u
    inner join address a
        on u.address_id = a.id
    where a.city = 'XXXX'
    
    第二个问题:

    select u.id, u.email
    from users u
    inner join address a
        on u.address_id = a.id
    where a.city = 'XXXX' AND
          u.created_at < NOW() - interval '3 months'
    order by u.created_at desc
    
    选择u.id、u.email
    来自用户u
    内部连接地址a
    在u.address_id=a.id上
    其中a.city='XXXX'和
    u、 在
    假设您想要选择居住在特定城市的用户,让我们在特定国家“埃塞俄比亚”中选择“亚的斯亚贝巴”

    从“用户”中选择*作为a.id=u.address\u id上的“地址”,其中a.city='Addis Ababa'和a.country='Ethiopia'和u.created\u在<当前日期-间隔'3个月'由u.created\u在DESC下订单;
    
    量化
    谁住在XXXX
    。。。您是要检查某一列,例如
    城市
    ,还是要检查一组地址列?某一列,例如城市。请提供一个最小、完整且可验证的示例:什么索引可以提高此查询的性能?@AlexZywicki您只需编写
    [MCVE]即可轻松链接到MCVE页面
    欢迎,如果答案解决了您的问题,您可以接受。
    SELECT * FROM "users" AS u JOIN "address" AS a ON a.id = u.address_id WHERE a.city = 'Addis Ababa' AND a.country = 'Ethiopia' AND u.created_at < CURRENT_DATE - INTERVAL '3 months' ORDER BY u.created_at DESC;