검색속도가 OUTER JOIN 하니까 너무 느려졌어요. 0 8 1,256

by ampwings [2017.01.11 22:12:27]


안녕하세요. 

 

원하는 값을 얻을 수 있지만 속도가 너무 느리네요.

처음 WHERE 절로 원하는 값을 얻으려 했으나 순서가 뒤바뀌는 문제가 발생되었습니다. 

순번이 넣어 순서가 뒤바뀌지 않도록 하기 위해 프로그램에서 no를 부여해서 쿼리에 넣어주게 되었습니다. 

테이블에는 없는 no를 임의로 넣어주려고 하다보니까 그 뒤에 OUTER JOIN 으로 나머지 내용을 붙이게 된 겁니다. 

 

SELECT A.no, A.partNum, B.description, B.net
FROM (VALUES (1, '01200136514') , (2, '01000410888') ) A (no, partNum)
    LEFT OUTER JOIN Parts_All B ON B.partNum = A.partNum
ORDER BY A.no; 

 

Parts_All 은 여러 테이블을 하나로 모은 뷰 테이블 입니다. 

 

다른 방법이 있을 듯 한데 떠오르질 않네요. 

 

by 마농 [2017.01.12 09:05:11]
SELECT *
  FROM Parts_All
 WHERE partNum IN ('01200136514', '01000410888')
 ORDER BY partNum DESC
;

 


by ampwings [2017.01.12 13:00:20]

답변 주셔서 감사합니다. 


by jkson [2017.01.12 09:16:39]

쿼리만 보면 단순히 sort 때문에 outer join 을 하신 게 아닌 것 같네요.

'01200136514', '01000410888' 값 중에 Parts_All 테이블에 없을 수도 있는 건가요?

그게 아니라면 굳이 outer join을 하실 필요가 없는 것 같고.. 만약 맞다면

a -> b로 조인될 때 partNum index를 잘 타고 있는지 점검해보셔야할 것 같네요.


by ampwings [2017.01.12 12:58:03]

답변 주셔서 감사합니다. 
Parts_All 테이블에 없을 수도 있는 경우입니다. 

조인될 때 partNum index를 잘 타고 있는지 점검해보라고 하셨는데.. 
테이블 생성할 때 인덱스를 만들어 주고는 있지만 어떤 식으로 점검해야 하는지는 모르겠습니다. 


by 마농 [2017.01.12 13:12:11]

뷰 정보를 알 수 있을까요?


by ampwings [2017.01.12 13:57:42]

CREATE OR REPLACE VIEW Parts_All (partNum, description,net)
    AS 
  SELECT p.partNum, p.description, n.net
  FROM Parts_ACURA p INNER JOIN NET_ACURA_USA n ON p.partNum=n.partNum
    UNION ALL
    ...

이렇게 브랜드들을 엮었습니다. 


by 마농 [2017.01.12 14:18:46]

테이블은 몇개인지?
각 테이블에 인덱스는 절절한지?
각 테이블 건수는 어느정도?
partNum 한개당 건수는 어느정도?
실행계획 확인시 인덱스 잘 타는지?


by ampwings [2017.01.12 17:07:38]

말씀해 주신대로 찬찬히 점검해 보겠습니다. 
db가 몇십만개.. 묶어서 몇백만개 되어도 where 절에서 검색하면 순식간에 찾아 내는 것을 보면서
데이터의 적재되어 양이 중요한게 아니라 어떻게 설계하고 쿼리문을 만드는지가 중요하다는 것을 알게 되었습니다.  
감사합니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입