제목 : 댓글 테이블 구조는 어떻게 가져가야 좋을까요?
페이스북 처럼 2단계구조를 가진 댓글 테이블을 구성 중인데요. 어떻게 해야 문제 없이
빠르게 저장되고, 빠르게 조회 될지 고민입니다.
일단, 제 나름대로 구성을 해봣는데요 아래 내역을 보시고 문제가 있거나, 추가 보완해야될
부분 또는 더 좋은 시스템을 제안해 주셨으면 합니다.
클럽마스터에 댓글을 작성하는 형식입니다. 아래에는 테이블 생성 스크립트와
인서트 내역, 조회 내역을 작성하였습니다.
구조는 페이스 북처럼 댓글, 댓글->댓글 형태로 작성이 가능하고, 이를 키를 생성하여
부모와, 자식관계로 작성하였습니다.
더 좋은 방법이 있으면 알려주세요. 이런시스템을 처음만들다보니, 불안하네요;;
댓글은 키하나에 10만건을 최대한으로 생각해 보았습니다.
인덱스는 어떻게 거는게 좋을까요?
//■ 클럽 마스터
CREATE TABLE `T_CL_CLUB` (
`CLXX_CLUB` int(11) NOT NULL AUTO_INCREMENT COMMENT '클럽 고유번호',
`CLXX_NAME` varchar(255) NOT NULL COMMENT '클럽명',
PRIMARY KEY (`CLXX_CLUB`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='클럽 마스터';
//■ 클럽 댓글내역
CREATE TABLE `T_CL_CLUB_COMMENT` (
`CCCX_NO` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '클럽 댓글 고유번호',
`CCCX_PARENTS` bigint(20) DEFAULT '0' COMMENT '클럽 댓글부모 고유번호',
`CLXX_CLUB` int(11) NOT NULL COMMENT '클럽 고유번호',
`CCCX_USER` int(11) NOT NULL COMMENT '유저 고유번호 작성자',
`CCCX_COMMENT` text COMMENT '클럽 댓글',
`IN_USER` int(11) DEFAULT NULL COMMENT '저장자',
`IN_DATE` datetime DEFAULT NULL COMMENT '저장시간',
PRIMARY KEY (`CCCX_NO`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='클럽 댓글';
//■ 클럽 마스터 인서트 내역
INSERT INTO T_CL_CLUB(CLXX_GUBUN, CLXX_ID, CLXX_NAME, CLXX_TEXT)
VALUES(0, '8801056086657', '아쿠아', '아쿠아 - 2%부족할때');
//■ 클럽 댓글 인서트 내역
INSERT INTO T_CL_CLUB_COMMENT(CCCX_PARENTS, CLXX_CLUB, CCCX_COMMENT, CCCX_USER)
VALUES(0, 1, '댓글 클럽1->댓글1', 1);
INSERT INTO T_CL_CLUB_COMMENT(CCCX_PARENTS, CLXX_CLUB, CCCX_COMMENT, CCCX_USER)
VALUES(0, 2, '댓글 클럽2->댓글1', 1);
INSERT INTO T_CL_CLUB_COMMENT(CCCX_PARENTS, CLXX_CLUB, CCCX_COMMENT, CCCX_USER)
VALUES(0, 3, '댓글 클럽3->댓글1', 1);
INSERT INTO T_CL_CLUB_COMMENT(CCCX_PARENTS, CLXX_CLUB, CCCX_COMMENT, CCCX_USER)
VALUES(1, 1, '댓글 클럽1->댓글1->댓글1', 1);
INSERT INTO T_CL_CLUB_COMMENT(CCCX_PARENTS, CLXX_CLUB, CCCX_COMMENT, CCCX_USER)
VALUES(1, 1, '댓글 클럽1->댓글1->댓글2', 1);
INSERT INTO T_CL_CLUB_COMMENT(CCCX_PARENTS, CLXX_CLUB, CCCX_COMMENT, CCCX_USER)
VALUES(2, 2, '댓글 클럽2->댓글1->댓글1', 1);
INSERT INTO T_CL_CLUB_COMMENT(CCCX_PARENTS, CLXX_CLUB, CCCX_COMMENT, CCCX_USER)
VALUES(2, 2, '댓글 클럽2->댓글1->댓글2', 1);
INSERT INTO T_CL_CLUB_COMMENT(CCCX_PARENTS, CLXX_CLUB, CCCX_COMMENT, CCCX_USER)
VALUES(0, 1, '댓글 클럽1->댓글2', 1);
INSERT INTO T_CL_CLUB_COMMENT(CCCX_PARENTS, CLXX_CLUB, CCCX_COMMENT, CCCX_USER)
VALUES(0, 1, '댓글 클럽1->댓글3', 1);
INSERT INTO T_CL_CLUB_COMMENT(CCCX_PARENTS, CLXX_CLUB, CCCX_COMMENT, CCCX_USER)
VALUES(0, 1, '댓글 클럽1->댓글4', 1);
INSERT INTO T_CL_CLUB_COMMENT(CCCX_PARENTS, CLXX_CLUB, CCCX_COMMENT, CCCX_USER)
VALUES(8, 1, '댓글 클럽1->댓글2->댓글1', 1);
INSERT INTO T_CL_CLUB_COMMENT(CCCX_PARENTS, CLXX_CLUB, CCCX_COMMENT, CCCX_USER)
VALUES(8, 1, '댓글 클럽1->댓글2->댓글2', 1);
INSERT INTO T_CL_CLUB_COMMENT(CCCX_PARENTS, CLXX_CLUB, CCCX_COMMENT, CCCX_USER)
VALUES(9, 1, '댓글 클럽1->댓글2->댓글1', 1);
INSERT INTO T_CL_CLUB_COMMENT(CCCX_PARENTS, CLXX_CLUB, CCCX_COMMENT, CCCX_USER)
VALUES(9, 1, '댓글 클럽1->댓글2->댓글2', 1);
INSERT INTO T_CL_CLUB_COMMENT(CCCX_PARENTS, CLXX_CLUB, CCCX_COMMENT, CCCX_USER)
VALUES(10, 1, '댓글 클럽1->댓글2->댓글1', 1);
INSERT INTO T_CL_CLUB_COMMENT(CCCX_PARENTS, CLXX_CLUB, CCCX_COMMENT, CCCX_USER)
VALUES(10, 1, '댓글 클럽1->댓글2->댓글2', 1);
COMMIT;
//■댓글 조회 쿼리짜리
SELECT A.CCCX_NO
, A.CCCX_PARENTS
, A.CCCX_USER
, A.CCCX_COMMENT
, A.ORDERIDX1
, C.UUXX_NAME
FROM (
SELECT A.CCCX_NO, A.CCCX_PARENTS, A.CCCX_USER, A.CCCX_COMMENT
, CASE WHEN B.CCCX_NO IS NULL THEN A.CCCX_NO ELSE A.CCCX_PARENTS END AS ORDERIDX1
FROM T_CL_CLUB_COMMENT A
LEFT JOIN (
SELECT CCCX_NO, CCCX_PARENTS
FROM T_CL_CLUB_COMMENT
WHERE 1=1
AND CLXX_CLUB = 1
AND CCCX_PARENTS = 0
#날짜 1달기준 조건조회
) B ON B.CCCX_NO = A.CCCX_PARENTS
WHERE A.CLXX_CLUB = 1
) A
LEFT JOIN C_US_USER C ON A.CCCX_USER = C.UUXX_USER
WHERE 1=1
ORDER BY A.ORDERIDX1, A.CCCX_NO
//■조회 결과
CCCX_NO CCCX_PARENTS CCCX_USER CCCX_COMMENT ORDERIDX1 UUXX_NAME
1 0 1 댓글 클럽1->댓글1 1 soonani82A
4 1 1 댓글 클럽1->댓글1->댓글1 1 soonani82A
5 1 1 댓글 클럽1->댓글1->댓글2 1 soonani82A
8 0 1 댓글 클럽1->댓글2 8 soonani82A
11 8 1 댓글 클럽1->댓글2->댓글1 8 soonani82A
12 8 1 댓글 클럽1->댓글2->댓글2 8 soonani82A
9 0 1 댓글 클럽1->댓글3 9 soonani82A
13 9 1 댓글 클럽1->댓글2->댓글1 9 soonani82A
14 9 1 댓글 클럽1->댓글2->댓글2 9 soonani82A
10 0 1 댓글 클럽1->댓글4 10 soonani82A
15 10 1 댓글 클럽1->댓글2->댓글1 10 soonani82A
16 10 1 댓글 클럽1->댓글2->댓글2 10 soonani82A
|