2012-08-29 46 views
-1

我正在处理显示组件的JSF页面。我想问您如何优化此SQL查询。我在家,我没有访问Oracle服务器来测试查询:如何优化此SQL查询

SqlStatementSmall = "SELECT a.* FROM (SELECT b.*, rownum rn " 
    + " FROM (select y.name, y.serialnumber, y.location, y.type, y.powerwatt," 
    + " y.dateadded, y.datedeployed, y.weightkg, y.uform, y.zonecage" 
    + " FROM component x, componentstats y where x.componentstatsid = y.componentstatsid" 
    + " and y.componenttypeid = 1122 ORDER BY %s %s) b" 
    + " WHERE rownum <= ?) a" 
    + " WHERE rn > ?"; 

谢谢你的帮忙!

+4

是的,你可以。 http://sqlfiddle.com/#!4 :) –

+0

我将ORDER BY添加到SQL查询 - 是否正确地使用它? – user1285928

+0

@ user1285928。 。 。没有ORDER BY只属于最外层查询的末尾(除非您使用的是分析函数)。它应该在最后的WHERE子句之后。 –

回答

1

你好,

 select y.name, y.serialnumber, y.location, y.type, y.powerwatt,y.dateadded, y.datedeployed, y.weightkg, y.uform, y.zonecage, rownum rn 
     from component x 
     inner join componentstats y on x.componentstatsid = y.componentstatsid 
     where y.componenttypeid = 1122 
     and rownum <= ? 
     and rownum > ? 
     ORDER BY %s %s 

更新 注意:这是行不通的,请参阅@Justin洞意见,感谢

+1

这不起作用。首先,在'ORDER BY'之前应用'ROWNUM'。所以,最好的情况是,这将获取一个任意的“N”行并对它们进行排序。它不会按顺序获取任意的“N”行。也不保证结果集是稳定的。此外,如果第二个'rownum>?'谓词的绑定变量是0以外的任何值,查询将根本不返回任何数据。谓词'rownum> 1'永远不会返回一行。 –

+0

@Justin Cave你能否写下你的最终建议。 – user1285928

+0

@ user1285928 - 您发布的查询看起来很合理,没有上下文。我发布了许多问题,我需要回答这些问题以获取上下文,以确定是否有更好的方式获得您感兴趣的结果和/或是否有改进性能的方法。没有这些问题的答案,我无法提供很多帮助。 –

1

它总是使我感到惊讶,当人们试图做的查询性能调整,而不执行计划和任何统计数据。你应该做的第一件事是获得一个执行计划。