首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多连接+大量数据优化

多连接+大量数据优化
EN

Stack Overflow用户
提问于 2013-12-13 16:55:28
回答 2查看 90关注 0票数 0

我正在进行大规模的工作连接,在添加索引等方面的资源非常有限,而且由于环境的原因,我可以在查询本身中做些什么(也就是说,我只能选择数据,不允许变量或表创建)。我在某个地方读到子查询会自动索引结果,这是真的吗?另外,对于我的主要联接表(3),每个表都有~140 K行。我必须加入两个额外的桌子,以确保过滤是正确的。我有下面列出的查询,我现在有关于JOIN子句的条件。另一个问题是,如果我将我的标准移到where子句,无论是在子查询中还是在子查询之外,它会受益吗?

代码语言:javascript
复制
  SELECT * 
FROM   (SELECT          NULL AS A1, 
                        DFS_ROHEADER.TECHID, 
                        DFS_ROHEADER.RONUMBER, 
                        DFS_ROHEADER.CUSTOMERNUMBER, 
                        DFS_CUSTOMER.BNAME, 
                        DFS_ROHEADER.UNITNUMBER, 
                        DFS_ROHEADER.MILEAGE, 
                        DFS_ROHEADER.OPENEDDATE, 
                        DFS_ROHEADER.CLOSEDDATE, 
                        DFS_ROHEADER.STATUS, 
                        DFS_ROHEADER.PONUMBER, 
                        DFS_TECH.REGION, 
                        DFS_TECH.RSM, 
                        DFS_ROPART.PARTID, 
                        CONVERT(NVARCHAR(max), DFS_RODETAIL.STORY) AS STORY 
        FROM   DFS_ROHEADER 
               LEFT JOIN DFS_CUSTOMER 
                      ON DFS_ROHEADER.CUSTOMERNUMBER = DFS_CUSTOMER.CUST_NO 
               LEFT JOIN DFS_TECH 
                      ON DFS_ROHEADER.TECHID = DFS_TECH.TECHID 
               INNER JOIN DFS_RODETAIL 
                       ON DFS_ROHEADER.RONUMBER = DFS_RODETAIL.RONUMBER 
               INNER JOIN DFS_ROPART 
                       ON DFS_RODETAIL.RONUMBER = DFS_ROPART.RONUMBER 
                          AND DFS_RODETAIL.LINENUMBER = DFS_ROPART.LINENUMBER 
                          AND DFS_ROHEADER.RONUMBER LIKE '%$FF_RONumber%' 
                          AND DFS_ROHEADER.UNITNUMBER LIKE '%$FF_UnitNumber%' 
                          AND DFS_ROHEADER.PONUMBER LIKE '%$FF_PONumber%' 
                          AND ( DFS_CUSTOMER.BNAME LIKE '%$FF_Customer%' 
                                 OR DFS_CUSTOMER.BNAME IS NULL ) 
                          AND DFS_ROHEADER.TECHID LIKE '%$FF_TechID%' 
                          AND DFS_ROHEADER.CLOSEDDATE BETWEEN 
                              FF_ClosedBegin AND FF_ClosedEnd 
                          AND ( DFS_TECH.REGION LIKE '%$FilterRegion%' 
                                 OR DFS_TECH.REGION IS NULL ) 
                          AND ( DFS_TECH.RSM LIKE '%$FF_RSM%' 
                                 OR DFS_TECH.RSM IS NULL ) 
                          AND DFS_RODETAIL.STORY LIKE '%$FF_Story%' 
                          AND DFS_ROPART.PARTID LIKE '%$FF_PartID%' 
        WHERE  DFS_ROHEADER.DELETED_BY < 0 
               AND DFS_RODETAIL.DELETED_BY < 0 
               AND DFS_ROPART.DELETED_BY < 0) T 
ORDER  BY T.RONUMBER 

这个查询可以工作;但是,它可能要花费很长时间才能运行,并且可以超时。我还有其他在环境中运行的问题,我将接受您所能给我的任何建议,并将其应用于这些建议。我正在使用SQLServer 2000,谢谢您的帮助。

编辑:

执行计划:

https://dl.dropboxusercontent.com/u/99733863/ExecutionPlan.sqlplan

更新:

我得出的结论是,我所工作的环境是问题的根源。我的查询按预期工作,一点也不慢(1秒)。18 000行)。正如注释中所述,我必须以有限的灵活性填充网格,我认为这些网格首先使用SQL语句填充临时网格,然后逐行复制到所需的网格中。这很有可能是我问题的原因。谢谢你的帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-13 19:27:36

我得出的结论是,我所工作的环境是问题的根源。我的查询按预期工作,一点也不慢(1秒)。18 000行)。正如注释中所述,我必须以有限的灵活性填充网格,我认为这些网格首先使用SQL语句填充临时网格,然后逐行复制到所需的网格中。这很有可能是我问题的原因。谢谢大家的帮助。

票数 0
EN

Stack Overflow用户

发布于 2013-12-14 03:18:10

我的两分钱..。一般来说,喜欢不是很好的优化。在您的示例中,您似乎使用的是“%值%”。在这种情况下,查询优化器必须扫描整个索引。至少,我想看看是否有办法避免使用这种方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20571864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档