Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server-减少读取次数_Sql_Sql Server_Tsql_Stored Procedures_Query Optimization - Fatal编程技术网

SQL Server-减少读取次数

SQL Server-减少读取次数,sql,sql-server,tsql,stored-procedures,query-optimization,Sql,Sql Server,Tsql,Stored Procedures,Query Optimization,我有一个关于SQLServer优化的一般性问题:如何减少存储过程中的读取次数 我对良好实践感兴趣,例如: -在物理表和临时表中创建索引 -使用临时表,而不是在过程中多次使用相同的表 -DML之前的DDL -在存储过程的开头设置NOCOUNT ON - 我们对所使用的磁盘空间存在问题,因为由两个存储过程引起的大量读取,我需要对其进行优化 存储过程中“最昂贵”的部分是: create table #stavke ( Id_Br int identity(1, 1), IDStavk

我有一个关于SQLServer优化的一般性问题:如何减少存储过程中的读取次数

我对良好实践感兴趣,例如: -在物理表和临时表中创建索引 -使用临时表,而不是在过程中多次使用相同的表 -DML之前的DDL -在存储过程的开头设置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 i.PARTIJA=@Account 
ORDER BY I.PARTIJA,z.RB,SI.id, z.KONTO,z.OZNVAL, SI.DKNIZENJA

表B、G、H和I我在本例中更改了表的实名,以便于阅读。表非常大,即有许多列和大量数据。

我希望您所说的是通过一个过程来最小化磁盘活动

首先,您可以使用

set statistics IO on;
有了这些信息,并使用SET-SHOWPLAN_ALL或XML获取执行计划,或者您可以利用ssms以符合人体工程学的方式获得相同的执行计划。您可以使用DTA进行基本调优


尝试将SP作为一组特殊的语句执行,看看IO在哪里比较重,然后集中精力在该段上。有许多好的做法可能适合您的要求。

我希望您所说的是通过一个过程来最小化磁盘活动

首先,您可以使用

set statistics IO on;
有了这些信息,并使用SET-SHOWPLAN_ALL或XML获取执行计划,或者您可以利用ssms以符合人体工程学的方式获得相同的执行计划。您可以使用DTA进行基本调优


尝试将SP作为一组特殊的语句执行,看看IO在哪里比较重,然后集中精力在该段上。有很多好的做法可能适合您的要求。

读操作是如何在您的环境中导致磁盘空间问题的?这是一个非常广泛的问题,许多大型书籍都致力于此。你最好问一个更具体的问题,如何优化X并提供代码和模式。我同意你需要在这里问一个具体的问题。如果您的存储过程有一些问题,请发布它们并询问如何优化。我会将其迁移到,但在当前的形式下,这个问题太模糊了。我以这种方式编辑了文章,添加了存储过程中“最昂贵”的部分,需要更改。此外,我还建议管理员在关闭它之前给更多的时间进行后期编辑,因为我看到您的答案太晚了,可能是因为时区不同……读操作是如何在您的环境中导致磁盘空间问题的?这是一个非常广泛的问题,许多大型书籍都致力于此。你最好问一个更具体的问题,如何优化X并提供代码和模式。我同意你需要在这里问一个具体的问题。如果您的存储过程有一些问题,请发布它们并询问如何优化。我会将其迁移到,但在当前的形式下,这个问题太模糊了。我以这种方式编辑了文章,添加了存储过程中“最昂贵”的部分,需要更改。另外,我建议管理员在关闭它之前给它更多的时间进行后期编辑,因为我看到您的答案太晚了,可能是因为不同的时区…谢谢您的回答,我以这种方式优化了存储过程,并获得了非常好的结果!作为第一次,我使用了设置统计IO;在执行计划中,我们可以看到程序的哪些部分消耗了最多的资源。之后,使用数据库引擎优化顾问,并根据我得到的建议创建索引。还得到了创建统计数据和一些可以提高性能的表的建议。在MSDN上,我找到了一些建议,可以接受DETA关于创建统计数据的建议。感谢您的回答,我用这种方法优化了存储过程,并获得了非常好的结果!作为第一次,我使用了设置统计IO;在执行计划中,我们可以看到程序的哪些部分消耗了最多的资源。之后,使用数据库引擎优化顾问,并根据我得到的建议创建索引。还得到了创建统计数据和一些可以提高性能的表的建议。在MSDN,我找到了接受DETA关于创建统计数据的建议的建议。