약300만건 가량 들어있는 테이블입니다.
프로시져로 짰는데 넘느리네요....기본조건으로 카테고리와 지역에 초기값을 줘서 범위를 좁혔는데도 프로필러돌리면 duration 이 대략2000~3000정도나옵니다.
인덱스는 addr,title에 cate1,cate2,cate3,cate4 인클루드로 준게 하나있고
ATTACH_FILE1,M_SEQ 에도 하나줬습니다.
어떻게 쿼리를 짜야 좀더빨라질까요? 쿼리분석기에서는 3초가량 걸리는데 웹에서는 4초~6초정도 걸리네요.
접속자가 많은 사이트에 리스트로 출력되는 거라...duration 이 500이내로는 나와야될텐데..고민입니다.
DBA고수님들 도와주세요~~~~
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
SELECT @TOTALCNT = COUNT(1)
FROM dbo.TB_BOARD
WHERE CATE1=(CASE WHEN @CATE1 IS NULL THEN CATE1 ELSE @CATE1 END )
AND CATE2=(CASE WHEN @CATE2 IS NULL THEN CATE2 ELSE @CATE2 END )
AND CATE3=(CASE WHEN @CATE3 IS NULL THEN CATE3 ELSE @CATE3 END )
AND CATE4=(CASE WHEN @CATE4 IS NULL THEN CATE4 ELSE @CATE4 END )
AND ADDR like ''+@AREA+'%'
AND TITLE like ''+@SVALUE+'%';
WITH TEMP_TABLE AS
(
SELECT
ROW_NUMBER() OVER(ORDER BY ATTACH_FILE1 DESC,M_SEQ DESC) AS RowNum,*
FROM dbo.TB_BOARD
WHERE CATE1=(CASE WHEN @CATE1 IS NULL THEN CATE1 ELSE @CATE1 END )
AND CATE2=(CASE WHEN @CATE2 IS NULL THEN CATE2 ELSE @CATE2 END )
AND CATE3=(CASE WHEN @CATE3 IS NULL THEN CATE3 ELSE @CATE3 END )
AND CATE4=(CASE WHEN @CATE4 IS NULL THEN CATE4 ELSE @CATE4 END )
AND ADDR like ''+@AREA+'%'
AND TITLE like ''+@SVALUE+'%'
)
SELECT A.*
,(SELECT COUNT(1) FROM TB_BOARD_CMT B WHERE B.M_SEQ=A.M_SEQ AND DEL_YN='N') AS CMTCNT
,(SELECT COUNT(1) FROM TB_BOARD_RECOM C WHERE C.M_SEQ=A.M_SEQ) AS RECOMCNT
FROM TEMP_TABLE A
WHERE ROWNUM BETWEEN ( @CURPAGE * @MAXPAGE + 1 - @MAXPAGE )
AND ( @CURPAGE * @MAXPAGE ) |