일단 현재 쿼리는
SELECT ISNULL(SUM(a),0) FROM table with(nolock) WHERE Company = 'test' and userID in(select user_id from user_table with(nolock) where CODE like '0105%' ) and regdate Between CONVERT(varchar(20) ,'2022-03-01 00:00:00', 120) And CONVERT(varchar(20),'2022-03-20 23:59:59', 120)
입니다.
헌데 데이터량이 워낙 방대해서 조회를 하는데 시간이 너무 오래 걸리네요.
좀더 좋은 방법으로 시간을 단축하면서 조회 할 수 있는 쿼리 좀 꼭 부탁드리겠습니다.
Comment 4
-
이리
2022.03.21 09:22
-
비상2834
2022.03.21 09:42
매출 웹페이지에 위와 같은 4개의 결과를 보여주는 상황입니다.
사용하는 데이터가 많아서 데이터량이 엄청 많은 상황이며, 페이지를 열때마다 저사양 서버가 아님에도 불구 하고 CPU 사용량이 100%까지 올라가더라고요.
제가 초보여서 index 활용등을 잘 몰라서요. 자세한 설명과 쿼리문 등을 알려주시면 정말 감사드리겠습니다.
참고로 insert 와 update를 많이 사용하게 되는 테이블이라 index를 사용하면 않 좋을 수도 있다고 하던데 맞는지도 알려주시면 감사드리겠습니다.
-
이리
2022.03.21 10:08
실행 계획 표시 및 저장 - SQL Server | Microsoft Docs
위 링크를 보시고 실행 계획을 한번 확인해 보세요
insert와 update를 많이 사용하는 테이블이 index를 사용하면 안좋다는 말은 조금 잘못 되었습니다.
테이블에 index가 많을 경우 insert, update, delete가 불리한것은 사실입니다.
다만 insert를 제외한 update, delete시에 대상 탐색에 index를 활용한다면 오히려 유리할 수 있습니다.
index에 관한 부분은 아래 링크를 참고해 보시기 바랍니다.
인덱스 | Microsoft 문서 - SQL Server | Microsoft Docs
SQL Server 및 Azure SQL 인덱스 아키텍처와 디자인 가이드 - SQL Server | Microsoft Docs
-
비상2834
2022.03.22 10:42
네 답변 감사합니다. 일단 확인 부터 해봐야 겠네요.
실행계획을 같이 올려주시면 더 정확하게 확인이 가능합니다.
쿼리만 봐서는 index를 잘 활용하는지 예상한대로 join이 이루어지는지 알 수 없습니다.
정말 data가 많은 상황이고 실시간이 중요하지 않다면 별도의 집계 테이블을 생성해서 활용하시는것도 방법이 될 수 있습니다.