我有两个查询可以背对背并填充两个单独的网格。它们不会在sql查询的同一个实例中运行,但是不会少于。简单查询性能问题
我已经在SSMS中运行了这两个查询,每个查询约5秒。 BO_HRO具有约600,000行,BO_HParts具有约1,200,000行,分别具有一对多关系。我也有一个SSIS建议的索引,这些索引是BO_HRO的deleted_by,RO_NO和BName以及一个关于deleted_by,RO_NO,Quanity,PartNo和PartDesc的BO_HParts的索引。
SELECT TOP 10000 bo_hparts.partno,
bo_hparts.partdesc,
SUM(bo_hparts.quanity) AS qtysum
FROM bo_hparts INNER JOIN bo_hro ON bo_hparts.ro_no = bo_hro.ro_no
WHERE bo_hparts.deleted_by < 0 AND bo_hro.deleted_by < 0
GROUP BY bo_hparts.partno, bo_hparts.partdesc
ORDER BY SUM(bo_hparts.quanity) DESC, bo_hparts.partno;
SELECT TOP 10000 bo_hro.bname,
bo_hparts.partno,
bo_hparts.partdesc,
SUM(bo_hparts.quanity) AS qtysum
FROM bo_hparts INNER JOIN bo_hro ON bo_hparts.ro_no = bo_hro.ro_no
WHERE bo_hparts.deleted_by < 0 AND bo_hro.deleted_by < 0
GROUP BY bo_hro.bname, bo_hparts.partno, bo_hparts.partdesc
ORDER BY SUM(bo_hparts.quanity) DESC, bo_hro.bname, bo_hparts.partno
我的老板仍然要以提高性能,我不知道自己还能做些什么实现自己的目标。有没有其他的方法来提高速度?
我这里有一个执行计划https://dl.dropboxusercontent.com/u/99733863/BO_HParts%20Join%20BO_HRO.sqlplan
请更新带有表别名的查询,以便我们可以确定列来自哪些表。此外,你可以删除'distinct' - 看看是否有助于性能。而且,'deleted_by'是否具有单个值(例如'-1'),还是您真的在检查多个值? –
@GordonLinoff添加别名和'distinct'并没有什么区别。您的deleted_by假设是正确的,它只是-1或1的单个值(-1未删除,1被删除) – shadowjfaith
在这种情况下,对于初学者,您可以简单地使用'= -1'代替'<0' 。我不知道这会有多大的影响,但是在任何情况下都值得这样做...... – PinnyM