안녕하세요 이번에 신입 개발자 입니다.
그룹웨어를 맏고 있는데요 어느페이지에서 페이지 response 가
느려서 쿼리를 분석하였는데 도저이 어떻게 해야 할지 몰라서 이렇게
질문을 올립 니다.
제가 경력이 부족하여 질문을 어떻게 해야 할지도 막막한데 이해해
주시구요 도움 부탁 드립니다.
쿼리는 길지도 않고 조인도 많이 걸려 있는것도 아니구요
select-list 가 길어서 대충 잘라서
select a.컬럼명들,b.컬럼명 들 from table a,table b
where a.AFR_id= b.id
and a.Folder_id = :a
and substr(a.date,0,4) ='2006'
order by a.date desc, SUBSTR(a.serial_number,8,14) DESC,
a.appending_number ASC
이런 쿼리 입니다 index 는 Folder_id 와, AFR_id,id 이렇게 걸려
있습니다.
문제는 Folder_id 이게 문제인데요 이게 분포도가 넓습니다 전체
데이터 량은 3백만권이 조금 넘구요 Folder_id 로통한 인덱스는 3만권
가져와서 저기 체크조건 2006년인것을 하면 만권정도가 나오구요 그리구
나서 조인과 order by로 해서 결과 늦씁니다.
call count cpu elapsed disk query
current rows
------- ------ -------- ---------- ---------- ----------
---------- ----------
Parse 1 0.01 0.00 0 0
0 0
Execute 1 0.00 0.00 0 0
0 0
Fetch 772 0.65 0.63 0 55580
0 11564
------- ------ -------- ---------- ---------- ----------
---------- ----------
total 774 0.66 0.64 0 55580
0 11564
Misses in library cache during parse: 1
Optimizer goal: FIRST_ROWS
Parsing user id: 30
Rows Row Source Operation
------- ---------------------------------------------------
11564 SORT ORDER BY
11564 NESTED LOOPS
11564 TABLE ACCESS BY INDEX ROWID AARSARCHIVEREGISTER
45801 INDEX RANGE SCAN AARSARCHIVEREGISTER_IDX01 (object id
10518)
11564 TABLE ACCESS BY INDEX ROWID
AARSARCHIVEFILEREGISTER
11564 INDEX UNIQUE SCAN AFR_PK (object id 6517)
trace 는 이렇게 나옵니다. 문제는 저기 forder_id 로만 검색을 할수
밖에 없거든요 그리고
랭귀지가 자바인데 한페이지에 게시판처럼 11564 가져와서 고작 15개
정도 밖에 안보여지는 게시판 형식입니다.
지금 처리는 Folder_id,substr(a.date,0,4) 해서 함수기반 인덱스를
만들어 봤는데요 너무 무책임한 처리 같은데 방법이
있을까요?
|