-1

考虑我的 DB2 查询如下。

Select something from some tables,
(select something from some tables where bhla=bhla
Unionall
select something from some tables where bhla=bhla
union
select something from some tables where bhla=bhla) x 
where bhla=bhla

它看起来像

select x.something, y.somethingelse from table y,
(select something from some tables where bhla=bhla
    Unionall
    select something from some tables where bhla=bhla
    union
    select something from some tables where bhla=bhla) x 
where bhla=bhla

我的查询是优化上述查询(使用查询的更好方式)。请提供一些关于索引的输入以及如何使用它。我需要优化上述查询,所以请提出一些建议。

你能建议 hw 重新编码下面的 where 子句吗

在哪里

(ID.EXCH_RT <> 0.000000 AND ID.EXCH_RT IS NOT NULL)  
AND I.ACT_LOC_TS BETWEEN ( :Param_290_From_Date CONCAT ' 00:00:00.00000')  AND ( :Param_300_To_Date CONCAT ' 23:59:59.99999') 
4

1 回答 1

3

无法使用给定的信息进行优化。

通常,当人们提出一个不够具体的问题时,他们只会提到如何提出问题。但是,我看到很多这种特殊情况:寻求帮助以优化定义不明确的 SQL 查询。所以我想更详细地解决这里的问题。

为什么不能优化?

  1. 我们不知道任务。 优化是您为一项任务所做的事情,而不是一段代码。您的目标是尽可能高效地完成任务。您发布的代码可能是也可能不是最好的方法。如果我们只有代码,不知道代码的用途,我们就无法评估您的代码是否合适。

  2. 我们不知道表结构。SQL 的优化很大程度上取决于相关表的结构。涉及哪些列,哪些数据类型?这些表是如何相互关联的?在这种情况下,我们甚至不知道涉及多少表,因为一些查询作用于“某些表”。

  3. 我们不知道数据。每张桌子有多大?考虑下面的示例查询。优化了吗?答案是,这一切都取决于数据。如果table1小而table2大,那将是优化查询的好方法。但是,如果table1是大而table2小,那将是一个非常糟糕的查询设计,会浪费大量时间。如果对数据一无所知,就无法说出最佳设计。

  4. 这取决于您使用的数据库(感谢 WarrenT)。在本例中,您已经指定了 DB2,与许多仅陈述“SQL”的问题相比,这是一个好的开始。但是,了解您使用的平台和版本仍然会有所帮助。这对可用的功能产生了重大影响。

示例查询:

with complicated as (
    select id, 
        char(foo) || case when bar = 1234 then 'a' else 'c' end || 'baz'
             as complicated_field
        from table1
)
select * from table2
    join complicated on 
        complicated.id = table2.id and
        complicated.complicated_field = table2.some_field

我希望这是有帮助的。如果您提供更多信息,我们很乐意为您提供进一步帮助。

于 2012-11-22T11:03:07.193 回答