swyp3-babpool / babpool-backend

🏆 스위프 3기 1위 수상
https://bab-pool.com
MIT License
0 stars 0 forks source link

refactor: 프로필 페이징 쿼리 개선 #190

Open proHyundo opened 1 month ago

proHyundo commented 1 month ago

📌 목적 / 이슈 내용

기존 프로필 페이징 쿼리의 조회 성능을 커버링 인덱스를 활용해 개선할 예정.

📝 상세 내용

create table babpool_origin_paging.t_keyword
(
    keyword_id      bigint                       not null
        primary key,
    keyword_subject varchar(10) default 'common' not null,
    keyword_name    varchar(36) default 'none'   not null
);

create index idx_keyword_subject
    on babpool_origin_paging.t_keyword (keyword_subject);

create table babpool_origin_paging.t_user_account
(
    user_id          bigint                                not null
        primary key,
    user_email       varchar(50) default 'none'            not null,
    user_status      varchar(10) default 'active'          not null,
    user_role        varchar(10) default 'ROLE_USER'       not null,
    user_grade       varchar(20) default 'none'            not null,
    user_nick_name   varchar(20) default 'none'            null,
    user_create_date datetime    default CURRENT_TIMESTAMP not null,
    user_modify_date datetime    default CURRENT_TIMESTAMP not null
);

create table babpool_origin_paging.t_m_user_keyword
(
    mapping_id bigint not null
        primary key,
    user_id    bigint not null,
    keyword_id bigint not null,
    constraint t_m_user_keyword_t_keyword_keyword_id_fk
        foreign key (keyword_id) references babpool_origin_paging.t_keyword (keyword_id),
    constraint t_m_user_keyword_t_user_account_user_id_fk
        foreign key (user_id) references babpool_origin_paging.t_user_account (user_id)
);

create index idx_m_user_keyword_keyword_id
    on babpool_origin_paging.t_m_user_keyword (keyword_id, user_id);

create table babpool_origin_paging.t_profile
(
    profile_id            bigint                                 not null
        primary key,
    user_id               bigint                                 not null,
    profile_image_url     varchar(150) default 'none'            not null,
    profile_intro         varchar(50)                            null,
    profile_contents      varchar(1000)                          null,
    profile_contact_phone varchar(11)                            null,
    profile_contact_chat  varchar(200)                           null,
    profile_active_flag   tinyint(1)   default 1                 not null,
    profile_create_date   datetime     default CURRENT_TIMESTAMP not null,
    profile_modify_date   datetime     default CURRENT_TIMESTAMP not null,
    constraint t_profile_t_user_account_user_id_fk
        foreign key (user_id) references babpool_origin_paging.t_user_account (user_id)
);

create index idx_profile_covering
    on babpool_origin_paging.t_profile (profile_modify_date desc, user_id desc, profile_active_flag asc, profile_intro
                                        asc, profile_image_url asc);

create index idx_user_covering2
    on babpool_origin_paging.t_user_account (user_id, user_nick_name, user_grade);

✔ 체크 리스트

💡 비고