SQL Serverの最適化に関する一般的な質問が1つあります。ストアドプロシージャの読み取り回数をどのように減らすことができますか?SQL Server - 読み取り回数を減らす
私のようなグッド・プラクティスに興味がある: - 物理的および一時テーブル でインデックスを作成する - 手順 で同じテーブルの数回を使用して代わりに一時テーブルを使用して - DML 前DDL - SET NOCOUNT ON格納されるの先頭に手順 - ...
私は、カップルのストアドプロシージャに起因する膨大な数の読み込みのために使用されるディスクスペースに問題があり、最適化する必要があります。 「最も高価」ですストアドプロシージャの
一部は次のとおりです。
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