Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BE] 27.11 데이터베이스 인덱싱 #238 #263

Merged
merged 2 commits into from
Dec 5, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion BE/src/asset/asset.entity.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm';
import { Column, Entity, PrimaryGeneratedColumn, Unique } from 'typeorm';

const INIT_ASSET = 10000000;

@Entity('assets')
@Unique(['user_id'])
export class Asset {
@PrimaryGeneratedColumn()
id: number;
Expand Down
3 changes: 2 additions & 1 deletion BE/src/stock/bookmark/stock-bookmark.entity.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm';
import { Column, Entity, PrimaryGeneratedColumn, Unique } from 'typeorm';

@Entity('bookmarks')
@Unique(['user_id', 'stock_code'])
export class Bookmark {
@PrimaryGeneratedColumn()
id: number;
Expand Down
4 changes: 4 additions & 0 deletions BE/src/stock/order/stock-order.entity.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,23 @@ import {
Column,
CreateDateColumn,
Entity,
Index,
PrimaryGeneratedColumn,
} from 'typeorm';
import { TradeType } from './enum/trade-type';
import { StatusType } from './enum/status-type';

@Entity('orders')
@Index(['user_id', 'stock_code'])
export class Order {
@PrimaryGeneratedColumn()
id: number;

@Index()
@Column({ nullable: false })
user_id: number;

@Index()
Copy link
Collaborator

@uuuo3o uuuo3o Dec 4, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟢 이거 신기해서 찾아보고 질문드립니다!
index 데코레이터 사용할 때 @Index(['user_id', 'stock_code']) 같은 형태로 안써도 되나용??
지금 위에 즐겨찾기같은 것도 그렇고..! user_id랑 stock_code는 둘이 조합했을 때 unique한거지. 각각 단일로 사용하면 절대 unique한 값이 아니잖아요.
이런 unique 하지 않는 값을 index로 하면 index를 사용해도 성능 향상에서는 큰 이점을 얻지 못하는 거 아닌가요??

Copy link
Collaborator

@uuuo3o uuuo3o Dec 4, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

코드 전문이 기억나지 않아서.. 부정확할 순 있습니다.
즐겨찾기의 경우에는 마이페이지 등에서 사용할 때 전체 목록을 조회할 때는 user_id 에 대해서만 많이 일어날 것만 같고, 그거 외에는 user_id, stock_code 컬럼의 조합으로 많이 일어날 것 같긴하네요. 가장 많이 일어나는 게 이렇게 단일/복합 두개라면 둘 다 인덱스로 사용해도 좋을 것 같습니다!!!
stock_code 단독으로 일어나는 경우가 없다면 그 인덱스는 지워도 될 거 같구요!

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

마이페이지에서는 user_id를 조건으로 빈번하게 탐색하고, 체결 가능한 주문을 찾을 때에는 stock_code를 조건으로 빈번하게 탐색할 것 같다고 생각해서 인덱싱을 따로 진행했습니다! 그리고 orders 테이블에서는 user_id + stock_code 조합이 유니크하지 않아서ㅠㅠ 따로 유니크 조건은 걸어주지 않았어요.

생각해보니 자산 업데이트할 때 등등 user_id + stock_code 조합으로도 조회가 많이 발생하긴 하네요! 이따 생각해보고 추가하겠습니당

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

넹ㅎㅎㅎ!! 덕분에 첨 알아가는 것도 알아가요!! 항상 감사합니다

@Column({ nullable: false })
stock_code: string;

Expand Down
Loading