안녕하세요. 오랜만에 인사드립니다.

다름이 아니라 뷰테이블 내에서 아래와 같이 group by를 썼는데 속도가 굉장히 느린 것 같습니다.

결과값은 수만개지만 웹에서 최종 쿼리는 페이징 쿼리를 따로 타서 20페이지씩 짤라서 보여주기는 하는데

이상하게 group by를 넣은 날부터 테스트 하시던 분들이 웹 조회가 굉장히 느려지고 MS-SQL을 사용하는

다른 어플리케이션들이 Timeout이 생긴다고 합니다.

DB쪽은 초짜라서 저렇게 group by를 써도 되는 것인지 모르겠습니다만 우선 결과가 잘 나오니 이렇게 쓰고는 있는데요

이걸 퍼포먼스를 고려하여 효과적으로 쿼리를 다시 짤 수 있을까요?

dbo.Pallet_Mst.PalletNo 항목을 기준으로 중복된 것이 많이 나와서 PalletNo 중복을 걸러서 묶어주려다 보니

저렇게 무식하게 많은 group by를 쓰게 되었습니다.

아니면 아예 처음부터 dbo.Pallet_Mst 테이블의 항목들을 중복 제거하여 조인을 걸어주는 방법을 쓰는 것이 나을런지요?

경험과 지식이 부족하여 이런 질문드리게 되어 죄송스럽게 생각합니다. 조언 주시면 정말 고맙겠습니다.

참고로 설치된 버전은 SQL 2012 입니다. 아래는 SQL Server가 느려지는 문제로 보이는 group by를 사용한

Vw_productPosition 테이블입니다.



이미지 242.png


위의 쿼리입니다.


SELECT  dbo.Pallet_Mst.PalletNo, dbo.Product_Mst.PartNo, dbo.Pallet_Dtl.Qty, dbo.Product_Mst.ErpCode, 

               dbo.Product_Mst.PartNm, dbo.Product_Mst.Standard, dbo.Product_Mst.Unit, dbo.Product_Mst.ProcDiv, 

               dbo.Product_Mst.Data1, dbo.Product_Mst.Data2, dbo.Product_Mst.Data3, dbo.Product_Mst.Data4, 

               dbo.Pallet_Mst.PalletDiv, dbo.Code_Mst.DivCode, dbo.Code_Mst.DivNm, dbo.Code_Mst.CodeNm, 

               dbo.Pallet_Mst.PlantSite, Code_Mst_1.DivCode AS DivCode2, Code_Mst_1.CodeNo AS CodeNo2, 

               Code_Mst_1.DivNm AS DivNm2, Code_Mst_1.CodeNm AS CodeNm2, dbo.Pallet_Mst.PrintDate, 

               dbo.Pallet_Mst.PrintUser, dbo.Pallet_Mst.State, dbo.Pallet_Mst.RegDate, dbo.Pallet_Mst.RegTime, 

               dbo.Pallet_Mst.Note, dbo.Pallet_Mst.Loc, dbo.Pallet_Mst.AssFlag

FROM     dbo.Pallet_Mst LEFT OUTER JOIN

               dbo.Position_Info ON dbo.Pallet_Mst.Loc = dbo.Position_Info.Loc INNER JOIN

               dbo.Pallet_Dtl ON dbo.Pallet_Mst.PalletNo = dbo.Pallet_Dtl.PalletNo INNER JOIN

               dbo.Product_Mst ON dbo.Pallet_Dtl.PartNo = dbo.Product_Mst.PartNo INNER JOIN

               dbo.Code_Mst ON dbo.Pallet_Mst.PalletDiv = dbo.Code_Mst.CodeNo INNER JOIN

               dbo.Code_Mst AS Code_Mst_1 ON dbo.Pallet_Mst.PlantSite = Code_Mst_1.CodeNo

WHERE  (dbo.Code_Mst.DivCode = '01') AND (Code_Mst_1.DivCode = '10') AND (dbo.Pallet_Mst.State = 'W')

GROUP BY dbo.Pallet_Mst.PalletNo, dbo.Product_Mst.PartNo, dbo.Pallet_Dtl.Qty, dbo.Product_Mst.ErpCode, 

               dbo.Product_Mst.PartNm, dbo.Product_Mst.Standard, dbo.Product_Mst.Unit, dbo.Product_Mst.ProcDiv, 

               dbo.Product_Mst.Data1, dbo.Product_Mst.Data2, dbo.Product_Mst.Data3, dbo.Product_Mst.Data4, 

               dbo.Pallet_Mst.PalletDiv, dbo.Code_Mst.DivCode, dbo.Code_Mst.DivNm, dbo.Code_Mst.CodeNm, 

               dbo.Pallet_Mst.PlantSite, Code_Mst_1.DivCode, Code_Mst_1.CodeNo, Code_Mst_1.DivNm, 

               Code_Mst_1.CodeNm, dbo.Pallet_Mst.PrintDate, dbo.Pallet_Mst.PrintUser, dbo.Pallet_Mst.State, 

               dbo.Pallet_Mst.RegDate, dbo.Pallet_Mst.RegTime, dbo.Pallet_Mst.Note, dbo.Pallet_Mst.Loc, dbo.Pallet_Mst.AssFlag



어떻게 다듬어야 퍼포먼스가 나올까요? 고수분들의 도움이 절실합니다.


No. Subject Author Date Views
Notice 2023년 1월 - SQLER의 업데이트 강좌 리스트 코난(김대우) 2023.01.02 480
7169 SSIS txt 파일 동적 생성 문의 [1] 김진우_283983 2013.09.16 4438
7168 고수님들 도와주세요 [1] 왕만두와우동 2013.09.16 3359
7167 로그 파일 줄이려는데 안됩니다. 조언 부탁 드립니다. [1] ssong 2013.09.13 6558
7166 ip주소로 로그인하기 [3] sdfgaa 2013.09.13 4300
7165 SSIS 에서 DB 데이터를 엑셀에 내보내기 할 때 [2] adb 2013.09.13 4354
7164 인증모드바꾸기 [1] sdfgaa 2013.09.13 3778
7163 엑셀에서 데이터 가져오기 sdfgaa 2013.09.13 5467
7162 테이블에 없는것 골라내기.. [1] 윤미 2013.09.13 4381
7161 null값이 자주 들어가는 칼럼을 index를 만들어도 되나요? [2] 청개구리대왕 2013.09.13 4693
7160 프로시져 질문. [2] 형님 2013.09.13 3776
7159 쿼리설치시문제좀해결해주세요 [2] dlawms 2013.09.12 3995
7158 시간 계산 관련 질문좀 드릴게요 [1] 왕만두와우동 2013.09.12 4356
7157 저장프로시저(SP)의 매개변수에 대하여 [4] 캡이다 2013.09.12 4950
» 뷰테이블 내의 Group by 퍼포먼스 관련 질문드립니다. [3] 하이페츠 2013.09.12 5168
7155 고수분들 초보적인것좀 도와주세요 [5] 왕만두와우동 2013.09.11 4351
7154 mssql 2000 -> 2008 업그레이드 관련 문의 드립니다. [1] 자비드 2013.09.11 6532
7153 테이블 합치는 방법에 대하여 질문드려요! [3] WhoAmI 2013.09.11 3806
7152 작업 모니터 사용법 [3] 비홍 2013.09.11 4160
7151 sql서버 메모리용량 [2] 비홍 2013.09.11 4342
7150 외래키 관련해서 질문좀 드립니다. [2] 왕만두와우동 2013.09.11 4718





XE Login