SQL Server 최적화에 대한 일반적인 질문이 하나 있습니다. 저장 프로 시저에서 읽기 수를 어떻게 줄일 수 있습니까?SQL Server - 읽기 횟수 줄이기
내가 좋아하는 모범 사례에 관심이 있어요 : - DDL DML 전에 - - 대신 절차 에서 같은 테이블에 몇 시간을 사용하여 임시 테이블을 사용 - 신체의 인덱스와 임시 테이블 을 만드는 저장의 시작 부분에 NOCOUNT ON SET 프로 시저 ...
우리는 몇 개의 저장 프로 시저로 인해 발생하는 많은 읽기 때문에 디스크 공간에 문제가 있으며이를 최적화해야합니다. '가장 비싼'는 저장 프로 시저의
부분은 다음과 같습니다
create table #stavke
(
Id_Br int identity(1, 1), IDStavke int,
HeaderID int, Currency varchar(3), GLAcct varchar(20), id varchar(20), Trnuid varchar(60),
ReferenceID varchar(20), DocumentID varchar(20),
DtAvail varchar(10), DtBooking varchar(10), DatePosted varchar(10),
Amount money, AmountLcl money,
Description varchar(250), Type varchar(10), DP int )
insert into #stavke
(
IDStavke, HeaderID, GLAcct, Currency, id , Trnuid ,
ReferenceID, DocumentID ,
DtAvail , DtBooking , DatePosted,
Amount , AmountLcl ,
Description , Type , DP
)
SELECT S.ID as IDStavke,
z.RB as HeaderID,
z.KONTO AS GLAcct,
z.OZNVAL AS Currency,
Si.BROJNALOGA as ID,
D.TRN as Trnuid,
case substring(SI.BROJNALOGA,1,4)
when '0746' then O.REFERENCA
when '1450' then D.REFERENCA
when '0743' then L.REFERENCA
when '2021' then N.REFERENCA
end ReferenceID,
case substring(SI.BROJNALOGA,1,4)
when '3000' then 'Kursna razlika'
when '2200' then 'PP-'+SI.BROJNALOGA
when '2201' then 'KDP-'+SI.BROJNALOGA
else SI.BROJNALOGA
end DocumentID,
dvalute as DtAvail,
si.dknizenja as DtBooking,
'' as DatePosted,
case si.teret
when 0 then si.korist
else si.teret
end Amount,
case SI.DINTERET
when 0 then si.dinkorist
else si.dinteret
end AmountLcl,
'' as Description,
case substring(SI.BROJNALOGA,1,4)
when '0746' then '0746'
when '1450' then '1450'
when '0743' then '0743'
when '2021' then 'Ostalo'
end Type,
case SI.DINTERET
when 0 then 1
else -1
end DP
FROM A I
inner join B st on i.transfer=st.transfer and i.partija=st.partija
INNER JOIN C SI ON st.RB=Si.RB
inner join D z on z.rb=st.rb
inner join E s on z.rb=s.rb AND s.BROJNALOGA = si.BROJNALOGA
LEFT JOIN F D ON D.BROJ=SI.BROJNALOGA
LEFT JOIN G L ON L.BROJ=SI.BROJNALOGA
LEFT JOIN H O ON O.BROJ=SI.BROJNALOGA
LEFT JOIN I N ON N.BROJ=SI.BROJNALOGA
WHERE I.novi_izvod=convert(int,@StatementNumber) AND [email protected]
ORDER BY I.PARTIJA,z.RB,SI.id, z.KONTO,z.OZNVAL, SI.DKNIZENJA
테이블 B, G, H와 나는 (I 읽기 쉽도록하기 위해, 예를 들어 테이블의 실제 이름을 변경)입니다 매우 큰, 즉 많은 컬럼과 많은 양의 데이터를 가지고 있습니다.
자세한 정보가 필요하면 내 게시물을 편집하십시오.
TnX 미리!
네마냐
환경에 ** READS ** 디스크 공간 문제가 발생하는 이유는 무엇입니까? – JNK
그것은 매우 광범위한 질문이며 많은 책이 헌정되어 있습니다. 좀 더 구체적인 질문을하면 (X를 어떻게 최적화 할 수 있습니까?) 코드와 스키마를 제공하는 것이 더 나을 것입니다. –
여기에 특정 질문이 필요하다는 데 동의합니다. 몇 가지 문제가 있으면 저장 프로 시저를 게시하고 최적화 방법을 묻습니다. – Paparazzi