테이블을 세개나 조인을 하는데 쿼리를 빨리할 방법이 있을까요 ㅡ.ㅡ;

테이블을 세개나 조인을 하는데 쿼리를 빨리할 방법이 있을까요 ㅡ.ㅡ;

QA

테이블을 세개나 조인을 하는데 쿼리를 빨리할 방법이 있을까요 ㅡ.ㅡ;

본문

쿼리는 아래와 같습니다.

저 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에 입력하는 이벤트가 발생할때마다 해당 결과값을 넣어주셔도 됩니다.
그누보드의 최신글이 이런식입니다.


조회보다 입력하는 이벤트가 적으니 위와 같은 쿼리를 해당 쿼리를 조회할떄가 아닌
조인들을 하는 테이블의 값이 변할때마다 결과값을 저장하는 테이블을 두면
한 테이블에서 값을 불러오면서 위의 조인과 같은 결과를 얻으실 수 있을겁니다

코드가 아름다운것....
테이블을 가능하면 작게 쪼개고, 뷰를 생성하고, 인덱스 걸고.... 했더니 늦어지더군요...
일단 해결은 했습니다.

그냥 조인 걸린것 다 해제하고 원래 테이블에서 목록 뽑아서
조인 됐던 추가 정보에 대한 쿼리를 별도로 날렸더니... 빨라지더군요.
그리고 다른 문제 발생...
정렬에도 조인이 있는데 정렬이 안돼는 문제가 당연히 발생하더군요.

예쁜 코드보다는 적절한 코드가 무엇인지 고민해야 되는 것 같아요.

님의 코드대로하면 저의 경우는 데이타가 약 세배로 늘어나더군요.
그래도 그것이 싸다는 결론에 달했습니다.
쿼리 한번 날리고 5초씩 기다리는 것보다.... 여러가지 이득이 있네요. 감사합니다.

데이타가 많아진다고 느려지면 인덱스 생성이나 테이블 설계가 잘못된 것이라 할수 있습니다

수억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 지원됩니다 

 

답변을 작성하시기 전에 로그인 해주세요.
전체 728
QA 내용 검색
filter #sql ×

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT