안녕하세요.^^ 좋은아침입니다.
며칠동안 고민하고 이곳에서 여러자료를 찾아 적용을 해보아도 개선되는
상태가 안보여 이렇게 글을 남깁니다.
이미지처럼 검색페이지가 있습니다.
검색을 하게되면 속도가 느린데요
수행시간: 148.4147초 정도 아니면 그이상입니다.
현재 4개의 테이블을 조인하는 상태이며
각 테이블의 레코드수는
prd_opt - 4백만건, jgorder - 백만건, member - 25만건, prd_opt_memo - 70만건 정도됩니다.
prd_opt 와 prd_opt_memo 은 관계형(?)이라고 볼수있겠네요.
아래 쿼리는 현재 구성되어진 쿼리인데요.
쿼리가 잘못된 부분이 있는것인지 아니면 디비성능을 개선해야되는것인지 잘몰라 글을남깁니다.
잘못된부분은 지적해주시기 바랍니다.^^
좋은하루되세요.
- 소스노출문제로 인하여 삭제합니다. 양해바랍니다.^^ -
^^답변감사합니다.
위 올린이미지와 쿼리문에 변경이 있어 다시올릴께요.
마농님이 말씀하신 표현해달라고 하신게 아래 내용이 맞는지 모르겠네요.
필수조건과 선택조건이라하시면 페이지가 열릴때 기본적으로 노출되는 리스트의 검색조건을 말씀하시는건가요?
그렇다면 필수조건이 없는걸로 봐야할것 같습니다.
저도 제가 직접개발한것이 아니라 소스분석하고 테스트하면서 하다보니 원하시는 답변을 정확히 못드릴것같네요. 죄송함다
소스도 복잡하고 인덱스도 좀 복잡하고 불필요한 인덱스를 잡은것도 있는것같구요.
- 소스노출문제로 인하여 삭제합니다. 양해바랍니다.^^ -
PK 가 실질식별자가 아닌 순번으로 되어 있네요.
실질식별자에 대한 UK 라도 설정이 되어 있어야 할텐데...
UK 를 설정한 것은 jgorder 뿐이네요.
그리고 인덱스는 각각의 컬럼별로 무수히 많네요?
그리고 메모 테이블의 키가 잘 표현이 안되어 있네요.
우선 실질 식별자를 알아야 테이블간의 관계를 파악할 수 있습니다.
제일 주가 되는 테이블이 주문테이블(jgorder) 인듯 하고
주문상품(prd_opt) 테이블이 있는 듯 한데 이 둘의 관계가 1:다 관계이겟죠?
회원(member) 과는 다:1 관계일 듯 하고
메모(memo) 와는 1:1 관계일까요? 1:다 관계일까요?
우선 다른 관계는 문제 없는데. 상품과 주문의 관계가 문제입니다.
주문내역을 조회해야 하는데 상품 때문에 동일 주문내역이 여러행으로 조회되게 됩니다.
그래서 Group by 가 사용되구요.
데이터량도 많고 인덱스도 부적절하고.. 여러가지가 문제인데...
결국 화면 설계를 통해 검색량을 줄여야 합니다.
필수조건을 좀 더 늘리고
기간 조건을 필수조건으로 최근 1달 조회 식으로 강제로 박으세요.
p_source 는 앞에 % 를 빼거나 아예 like 가 아닌 이퀄 검색이 가능하도록 보완하세요.
그리고 페이징 처리를 하세요.
한페이지에 보일 만큼만 조회하세요.