테이블을 세개나 조인을 하는데 쿼리를 빨리할 방법이 있을까요 ㅡ.ㅡ;
본문
쿼리는 아래와 같습니다.
저 AA테이블에 데이타도 한달에 4000개씩 쌓일 예정입니다.
한번 실행한 페이지는 금방 나오는데.....
인덱스 잡을줄을 몰라서....
그냥 조인하지 않고 한페이지에 목록이라야 20개 밖에 안되는데...
그냥 다 별도로 쿼리 날려버릴까요 ㅡ.ㅡ;;;
SELECT AA . * , BB . * , GG.gnm, GG.gram
FROM
xxgipo AA, xxnh BB, xxgg GG
WHERE
AA.nhcode = BB.nhcode
AND AA.barcd1 = GG.barcd1
AND AA.ym = '2019-08'
ORDER
BY AA.nhcode, AA.cno, GG.gnm
LIMIT 3390 , 30
답변 4
쿼리가 실시간 반영이 필요 없는거라면 일정시간마다 결과값을 저장하는 db를 두시는 방법도 있습니다.
그누보드에선 최신글 캐시가 위의 내용과 같은 방법 중 하나입니다.
실시간 반영이 필요하다면
위의 조인결과를 출력하는 전용 테이블을 만드신 후
해당 db에 입력하는 이벤트가 발생할때마다 해당 결과값을 넣어주셔도 됩니다.
그누보드의 최신글이 이런식입니다.
조회보다 입력하는 이벤트가 적으니 위와 같은 쿼리를 해당 쿼리를 조회할떄가 아닌
조인들을 하는 테이블의 값이 변할때마다 결과값을 저장하는 테이블을 두면
한 테이블에서 값을 불러오면서 위의 조인과 같은 결과를 얻으실 수 있을겁니다
데이타가 많아진다고 느려지면 인덱스 생성이나 테이블 설계가 잘못된 것이라 할수 있습니다
수억row의 데이타 라고 하더라도 정확히 키가 걸려있으면 0.1초 내외로 나오는게 정상입니다
캐시를 하더라도 결국 인덱싱은 그 캐시테이블에도 필요할겁니다
인덱스를 생성해보세요
create index n_three_index on xxgipo(nhcode, barcd1, ym);
create index n_b on xxnh(nhcode);
create index n_g on xxgg(barcd1);
인덱스 어렵지않습니다.
SQL YOG 같은 툴쓰면 gui 지원됩니다