중첩 된 하위 쿼리를 사용하는 MySQL 쿼리가 있습니다.MySQL 하위 쿼리 속도 향상 필요
웹 페이지를 실행하는 데 약 2 초가 걸리므로 속도를 높이기 위해 여러 가지 방법을 시도했습니다.
어떻게이 쿼리의 속도를 높일 수 있습니까? 이미 뷰 및 쿼리 캐싱을 사용해 보았지만 성능상의 이점은 명목상이었습니다.
SELECT w.WID,
max(wb.BlockPrice) as highestPrice,
min(wb.BlockPrice) as lowestPrice,
max(bi.Impressions) as highestImpressions,
min(bi.Impressions) as lowestImpressions
FROM Website w
JOIN Website_Block wb on wb.WID = w.WID
JOIN Website_Block_Impressions wbi on wbi.WBID = wb.WBID and wbi.StatDate > DATE_SUB(NOW(),INTERVAL 1 DAY)
JOIN (
SELECT round((Sum(Impressions)/Count(impDate)) * 30) AS Impressions, WID as WIDImpressions
FROM (SELECT COUNT(wbi.WBIID) AS Impressions,
CAST(wbi.StatDate AS DATE) AS impDate,
wbi.WBID,
wb.WID
FROM Website_Block_Impressions wbi
JOIN Website_Block wb ON wb.WBID = wbi.WBID
WHERE wb.BlockEnabled = 1
AND wb.Archived = 0
AND `wbi`.StatDate > DATE_ADD(now(), INTERVAL -wb.BlockDuration DAY)
GROUP BY CAST(wbi.StatDate AS DATE), wbi.WBID) AS impressions
GROUP BY WBID) as bi
WHERE w.Archived = 0
AND w.Approved = 1
AND bi.WIDImpressions = w.WID
AND bi.Impressions between 0 AND 73000
GROUP BY w.WID
LIMIT 0,10
어떤 도움을 주시면 감사하겠습니다.
'EXPLAIN' 출력과 테이블 정의를 게시하여 인덱스가 무엇인지 확인하십시오. –
매우 복잡한 쿼리, 때로는 SQL 만 사용하여 향상시킬 수 없으며 응용 프로그램 수준에서 일부 쿼리를 결합하고 하위 수준 쿼리를 캐시하는 데 응용 프로그램 수준을 사용하는 것이 더 좋을 수도 있습니다 – jlmfao
인덱스는 ID로 끝나는 모든 기본 키 필드에 있으며 wbi.StatDate 필드에 –