-- mysql
안녕하세요.
늘상 이곳에서 도움만 받는 별리 입니다.
쿼리문 구성중 속도가 느린문제점이 있는데 무엇을 잘못한것인지 알수가 없어 조언좀 구하려고 합니다.
쿼리내용은 쇼핑몰 카테고리 입니다.
SELECT cate_code , cate_name , depth , prior01 , prior02 , prior03 , prior04 , (SELECT COUNT(*) -- 하위카테고리 개수구함 FROM category WHERE cate_code LIKE CONCAT(SUBSTRING_INDEX(brd.cate_code, 0, 5), '%') AND depth = brd.depth + 1 ) AS cnt FROM category brd WHERE depth='1' ORDER BY prior01, prior02, prior03, prior04
현재 등록된 카테고리수는 총340개 입니다.
카테고리구성은 총 4차카테고리 이구요.
인덱스는 잡혀있습니다.
자기자신을 포함한 하위카테고리의 개수를 구하고 싶은데. 해당부분에서 지연이 되는것 같습니다.
cate_code 자릿수는 총20자리입니다.
데이터가 많지도 않은데 왜 느린것인지 조언좀 부탁드립니다.
감사합니다.^^
건수가 적어 느릴 이유가 없어 보이는데요? 혹시 340건이 전체 건수가 아닌 1레벨 건수인가요?
서브쿼리 조건이 PK 조건이라 인덱스도 잘 탈 듯 한데요?
일단은 쿼리가 이상합니다.
서브쿼리 비교식에 엉뚱한 함수가 사용되었네요?
우선 substring_index 부분 빼세요.
2 레벨 건수만 가저오면 될 듯 하니 '%' 대신 '_____' 로 바꿔보세요.
(코드가 레벨당 5자리씩 차지한다고 가정)
cate_code LIKE CONCAT(brd.cate_code, '_____')
샘플자료 보여주세요.
prior01, prior02, prior03, prior04 를 합친 형태가 cate_code 가 되는 건가요?
-- 1. 조인으로 풀기 -- SELECT m.cate_code , m.cate_name , m.depth , m.prior01 , m.prior02 , m.prior03 , m.prior04 , COUNT(s.cate_code) AS cnt FROM category m LEFT OUTER JOIN category s ON s.cate_code LIKE CONCAT(m.cate_code, '_____') AND s.depth = '2' WHERE m.depth = '1' GROUP BY m.cate_code , m.cate_name , m.depth , m.prior01 , m.prior02 , m.prior03 , m.prior04 ORDER BY prior01, prior02, prior03, prior04 ;