--1 조인만 되어 있는 상태. 힌트도 쓰지 않고 tbl_reply에 인덱스도 없어 너무 오래 걸림
select
bbs.bbsno, min(title), count(replyno)
from
tbl_bbs bbs, tbl_reply reply
where bbs.bbsno = reply.bbsno(+)
group by bbs.bbsno
order by bbs.bbsno desc;
------------------------------------------------------------------------------------------------
검색 속도를 높이기 위해 tbl_reply에 인덱스를 추가. BBSNO 역순으로 정렬하므로 인덱스도 다음과 같이 만들어 줘야 함.
create index idx_reply_bbs on tbl_reply(bbsno desc);
다음과 같이 인덱스를 주면 Full Scan이 걸려서 별 도움이 안됨. Drop후 다시 만들어야 함.
create index idx_reply_bbs on tbl_reply(bbsno);
drop index idx_reply_bbs;
--2 힌트를 줘서 BBSNO 역순으로 자료가 나오도록 호출.
select
bbs.bbsno, min(title), count(replyno)
from
(select /*+ INDEX_DESC(tbl_bbs PK_BBS) */ *
from tbl_bbs
where rownum<=20 and bbsno>0) bbs, tbl_reply reply
where bbs.bbsno = reply.bbsno(+)
group by bbs.bbsno;
--3 힌트 대신 BBSNO 기준으로 Order By 해줌. 거의 차이가 없음.
select
bbs.bbsno, min(title), count(replyno)
from
(select
*
from
tbl_bbs bbs
where rownum<=20 and bbsno>0 order by bbs.BBSNO desc) bbs, tbl_reply reply
where bbs.bbsno = reply.bbsno(+)
group by bbs.bbsno;
--4 tbl_reply 테이블을 서브쿼리로 만듦. 시간은 오히려 더 걸림
select
bbs.bbsno, min(title), count(replyno)
from
(select /*+ INDEX_DESC(tbl_bbs PK_BBS) */ *
from tbl_bbs
where rownum<=20 and bbsno>0) bbs,
(select /*+ INDEX(tbl_reply idx_reply_bbs) */* from tbl_reply where bbsno>0) reply
where bbs.bbsno = reply.bbsno(+)
group by bbs.bbsno;
select
bbs.bbsno, min(title), count(replyno)
from
(select /*+ INDEX_DESC(tbl_bbs PK_BBS) */ *
from tbl_bbs
where rownum<=20 and bbsno>0) bbs,
(select * from tbl_reply where bbsno>0) reply
where bbs.bbsno = reply.bbsno(+)
group by bbs.bbsno
order by bbs.bbsno desc;
-----------------------------------------------------------------------
Join되는 댓글 수를 줄임. 안해도 됨.
update tbl_reply set bbsno = bbsno-replyno;
'코딩 > Oracle' 카테고리의 다른 글
(3) 오라클 실습 - 필수 SQL (0) | 2014.09.14 |
---|---|
Oracle SQL - 게시판용 table 생성 예제 단계별 (3) (0) | 2014.09.13 |
Oracle SQL - 게시판용 table 생성 예제 (1) (0) | 2014.09.13 |
Oracle SQL - Toy Data 데이터 만들기 (0) | 2014.09.13 |
JDBC 연결 예제 3 - Try ~ With (0) | 2014.09.13 |