查询优化(Netezza)

时间:2013-02-15 15:29:03

标签: optimization netezza

我正在尝试为我的一个朋友解决Netezza的问题。 我的朋友正试图在Netezza做一些非常简单的事情:

select * 
from 
test
where 
ID1 = 12345
and date >= 12/1/2012 and event date <= 12/31/2012
and ID2 in
(x1, x2, ..., x150000)

此查询永远不会返回。

在Oracle中,我们可以尝试这样的事情:

/*******************************************************************/
/*To reduce the size of the table...*/

create table t_test as
select * 
from 
test
where 
ID1 = 12345
and date >= 12/1/2012 and event date <= 12/31/2012;

/*To make the search on ID2 faster...*/
create index i_ID2 on t_test (ID2);

select * 
from 
t_test
where 
ID2 in
(x1, x2, ..., x150000)

/*Alternative: People say "IN" may be very inefficient at times...*/

select * 
from 
t_test
where 
ID2 = x1
or ID2 = x2
.
.
.
or ID2 = x150000
/*******************************************************************/

然而,这在Netezza中是不可能的,因为它没有任何索引概念。

如何解决这个问题?

谢谢和问候,

2 个答案:

答案 0 :(得分:2)

运行它时,行和“和日期&gt; = 12/1/2012以及事件日期&lt; = 12/31/2012”的编码是怎样的?你真的有一个名为“DATE”的专栏吗? “活动日期”中缺少一个下划线?

12/1/2012评估为整数零,而不是日期。使用:

date '2012-12-01'
date '2012-12-31'
像Oracle一样

或to_date('12 / 1/2012','mm / dd / yyyy')

答案 1 :(得分:0)

试试这种方式

select * 
from 
test
where 
ID1 = 12345
and eventdate BETWEEN DATE('12/1/2012') DATE('12/31/2012')
and ID2 in
(x1, x2, ..., x150000)