0

我有几千个 col1,col2 不同的值。Col1 -> 一些主键和 Col 2 -> 日期。

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

现在我担心的是如何编写我的 where 条件或使用联合,以便我查询我的数据库的次数减少。由于这个原因,我的程序很慢。

目前我正在使用 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'
4

2 回答 2

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
于 2010-09-21T09:38:18.163 回答
0

现在,我将 count=25 删除 union 进行分组,我的程序得到了很好的改进。谢谢,但如果有更好的选择,我很感兴趣。

于 2010-09-19T11:21:38.600 回答