2010-09-17 62 views
0

我有几千个col1,col2不同的值。 Col1 - >一些主键和Col 2 - >日期。在Sybase中批量选择

对于第三栏3,我必须查询一个大表,在大多数情况下,这只能给我几百个结果。

现在我的担心是如何写我的地方的条件或使用工会,以便我查询我的数据库的次数减少。由于这个,我的程序很慢。

目前我在使用DBI在我的perl程序中做类似下面的事情。

select COL3 from Table where (COL1='v1' and COL2='Sep 25 2007 12:00AM') or (COL1='b3' and COL2='Sep 28 2007 12:00AM') 
or (COL1='c1' and COL2='Sep 11 2007 12:00AM') and COL3='ABCD' 
union 
select COL3 from Table where (COL1='v2' and COL2='Sep 28 2007 12:00AM') or (COL1='b2' and COL2='Oct 1 2007 12:00AM') 
or (COL1='c2' and COL2='Sep 28 2007 12:00AM') and COL3='ABCD' 
union 
select COL3 from Table where (COL1='v3' and COL2='Oct 1 2007 12:00AM') or (COL1='b1' and COL2='Sep 28 2007 12:00AM') 
or (COL1='c3' and COL2='Sep 24 2007 12:00AM') and COL3='ABCD' 
+0

我认为工会是我做的愚蠢的事情,它让我的工作更加缓慢。不是一个好方法。 – awake416 2010-09-17 11:49:06

回答

0

现在我把count = 25的东西分组,删除union,我的程序有了很大的提升。谢谢,但如果有更好的选择,我很感兴趣。

1

这样做的一种方法是创建一个临时表来存放您拥有的所有col1和col2值。将col1和2的值插入临时表,然后在临时表和表之间做一个查询连接(我只是为每个表的第一部分做一个查询连接,或者因为COL3 ='ABCD'的位会类似

零件该代码将是

create table #t 
(
COL1 char(2) not null, 
COL2 datetime not null 
) 

做插入

然后

select col3 
    from Table 
    inner join #t t on t.COL1 = Table.COL1 and t.COL2 = Table.COL2 
+0

是的,这是一个好主意,让我看看我是否可以得到一些性能改善..但它不会创建一些额外的布尔顿,创造几千行的表。 再次感谢您的回复 – awake416 2010-09-21 10:05:49

+0

我会怀疑它会占用较少的资源在服务器上,因为您正在做的选择较少,并且您正在向服务器发送类似数量的数据 - 无论是在代码中还是在我的解决方案中作为数据 – Mark 2010-09-21 10:54:37