3개의 테이블이 있습니다. 구조는 다음과 같습니다. (제가 성능을 올리고자 하는 쿼리에서 사용하는 컬럼만 명시하겠습니다.)
PRINTER
컬럼
id(int, not null), ipaddr(varchar(25), not null), model(varchar(128)), groupcode(varchar(30)), paneltext(varchar(255)), statcode(varchar(10)), gettime(char(14)), total_count(int)
인덱스
id에 clustered index
STATE_CODE
컬럼
code(varchar(10)), err_type(tinyint)
인덱스
code에 clustered index
PE_USAGE
컬럼
printerid(int), pages(smallint), computation_price(float)
이상이고 키나 제약조건은 셋다 없습니다;;
select top 10 a.ID, a.IPADDR, a.MODEL, a.GROUPCODE, a.PANELTEXT, isnull(sum(d.PAGES),0) as PAGES,
a.STATCODE, a.GETTIME, isnull(a.TOTAL_COUNT,0) as TOTAL_COUNT, isnull(c.ERR_TYPE,3) as ERR_TYPE,
isnull(sum(d.COMPUTATION_PRICE),0) as COMPUTATION_PRICE
from PRINTER as a left outer join STATE_CODE as c on(a.STATCODE=c.CODE) left outer join PE_USAGE as d on(a.ID=d.PRINTERID)
group by a.ID, a.IPADDR, a.MODEL, a.GROUPCODE, a.PANELTEXT, a.STATCODE, a.GETTIME, isnull(a.TOTAL_COUNT,0), isnull
(c.ERR_TYPE,3)
order by GETTIME desc
이렇게 쿼리를 날리면 시간이 너무 오래걸립니다..
인덱스를 추가하거나 어떤 튜닝을 통해서 성능을 향상할수 있나요? 아니면 쿼리 자체가 비효율적인가요?
답변을 위한 정보가 부족하시다면 말씀해 주세요 추가하겠습니다.