SQLServer性能调优查询从20秒到2秒

1。需求

要求很简单,也就是说,您只需要查询1个表,大约60万的数据,但中间有一些逻辑。

首先,描述服务器配置:1核处理器、2GB内存、机械硬盘,SQL Server 2008 R2,Windows Server2008 R2 SP1和Ali云服务器,这简直是最糟糕的Ali云服务器。

1。原始表结构


这是一个非常简单的表。这一次,我们将不再讨论数据冗余和表字段的设计。例如,如果我们能把项目和保健为表等,这是原来的表结构。现在没有办法改变它。

2。查询的SQL语句是




从中选择*(
Select *, ROW_NUMBER () OVER (ORDER BY SC DESC) as rank
(从
选择*,
在(40 -(附加保险费×(附加保险费×(A P>0时1其他0.5端)))< = 30
然后30
其他(40 -(附加保险费×(A P>0时1其他0.5))))
End as SC
(从
从中选择*(
选择a.projectnumber,a.projectname,a.baojiannumber,a.baojianname,a.toubiaoperson,
金额(单价)为sumprice,
船上的交货价为avgprice,
(金额(单价)-船上的交货价)/ NULLIF(船上的交货价,0)* 100)P,
金额(单价>时船上的交货价然后其他船上的交货价单价端)Pprice,
金额(单价>时maxprice然后1其他0端)为countchao
从toubiaodetailtest1一
(加入
选择项目,项目名称,baojiannumber,baojianname,AVG(价格)价格
(从
从中选择*(
选择项目,项目名称,baojiannumber,baojianname,ToubiaoPerson,
金额(单价)价格,
金额(单价>时maxprice然后1其他0端)为countchao
从toubiaodetailtest1
通过项目,项目名称,baojiannumber,baojianname组、ToubiaoPerson
TT)
在tt.countchao = 0
T)
通过项目,项目名称,baojiannumber组、鲍建娜么
B)
在a.projectnumber = b.projectnumber和a.projectname = b.projectname和a.baojiannumber = b.baojiannumber和a.baojianname = b.baojianname
通过a.baojiannumber,a.baojianname,a.projectnumber,a.projectname,a.toubiaoperson组,船上的交货价
TT)
在TT。countchao = 0
一)
B)
T)
顺序排名


本节SQL语句的主要功能是:

1。根据项目,项目名称,baojiannumber,baojianname,toubiaoperson分组,查询所有数据的总和(单价)



单价> maxprice判断逻辑,如果一个数据是令人满意的,该组中的所有数据无法查询。

2、根据项目,项目名称,baojiannumber和baojianname分组,查询所有数据平均值(价格),以上两个步骤主要是查询的平均值(baojianname)基于项目,项目名称,baojiannumber和baojianname分组。

三.那么相应的值,分数,和分数分页,等等,都是根据逻辑。

两。性能调优

在进行任何优化之前,查询时间大约是20秒。

1。Establish an index

根据SQL语句,我们可以知道它将骨料按5个领域(项目,项目名称,baojiannumber,baojianname,toubiaoperson),所以我们尝试添加非聚集索引idx_calc。

添加项目,项目名称,baojiannumber,baojianname,在索引键列toubiaoperson。图:


然后执行查询SQL语句,发现执行时间减半,长达10610毫秒。

2。索引包含列

分析SQL查询可以知道我们需要计算的值是唯一的单价和maxprice,所以我们想把单价和maxprice到idx_calc.figure包柱


然后执行查询SQL语句,并发现执行时间再次减半,只要从现在的20秒以上优化6313毫秒到超过6秒。

三.再次优化查询SQL

再次,SQL语句可以暂时把AVG(价格)在临时表中的所有数据表(# temp_table),然后把数据从临时表(# temp_table)直接计算其他值时。


然后执行查询SQL语句,执行时间只有2323毫秒。

在硬件、表数据和查询复杂性的情况下,基本上可以满足查询的要求。

三。总结

经过三个步骤:1,建立索引,2,添加一个列,3个,然后使用一个临时表。三个步骤可以用来优化查询时间从20秒到2秒。

以上是SQL Server性能调优从20秒到2秒的查询。希望能对你有所帮助。如果你有任何问题,请给我留言,萧边会及时给您回复。谢谢您支持网站。