考虑我的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')
答案 0 :(得分:3)
无法根据给出的信息进行优化。
通常情况下,当人们提出的问题不够具体时,他们会被引用How to Ask a Question。但是,我看到了很多这种特殊情况:请求帮助优化未明确定义的SQL查询。所以我想更详细地解决这里的错误。
为什么不能对此进行优化?
我们不知道任务。优化是您为任务所做的事情,而不是一段代码。您的目标是尽可能高效地完成任务。您发布的代码可能是也可能不是最好的方法。如果我们只有代码,并且不知道代码是什么,我们就无法评估代码的适当性。
我们不知道表格结构。 SQL的优化很大程度上取决于所讨论的表的结构。涉及哪些列以及哪些数据类型?表格如何相互关联?在这种情况下,我们甚至不知道涉及多少个表,因为一些查询作用于“某些表”。
我们不知道数据。每张桌子有多大?考虑下面的示例查询。它是否优化?答案是,这一切都取决于数据。如果table1
很小且table2
很大,那么这将是优化查询的好方法。但是,如果table1
很大并且table2
很小,那么这将是一个非常糟糕的查询设计,浪费了大量时间。如果不了解数据,就无法告诉最佳设计。
这取决于您使用的数据库(感谢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
我希望这会有所帮助。如果您提供更多信息,我们将很乐意为您提供进一步的帮助。