如何优化给定的db2查询,

时间:2012-11-22 07:02:34

标签: db2

考虑我的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

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

你是否可以建议hw重新编码以下where 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') 

1 个答案:

答案 0 :(得分:3)

无法根据给出的信息进行优化。

通常情况下,当人们提出的问题不够具体时,他们会被引用How to Ask a Question。但是,我看到了很多这种特殊情况:请求帮助优化未明确定义的SQL查询。所以我想更详细地解决这里的错误。

为什么不能对此进行优化?

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

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

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

  4. 这取决于您使用的数据库(感谢WarrenT)。在这种情况下,您已经指定了DB2,与仅提出“SQL”的许多问题相比,这是一个良好的开端。但是,了解您正在使用的平台和版本仍然有用。这对可用的功能有显着影响。

  5. 示例查询:

    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
    

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