2010-09-17 2 views
0

У меня есть несколько тысяч значений col1, col2. Col1 -> некоторый первичный ключ и Col 2 -> дата.Массовый выбор в Sybase

Для третьего столбца 3 я должен запросить большую таблицу, которая дает мне всего несколько сотен результатов в большинстве случаев.

Теперь моя забота заключается в том, как написать мое место, где условия или использовать союзы, чтобы количество раз, когда я обращаюсь к моей БД, уменьшается. Из-за этого моя программа медленная.

В настоящее время я делаю что-то вроде ниже в моей программе perl, используя DBI.

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

ответ

0

На данный момент я сгруппировал вещи с помощью count = 25, удалив соединение, и у меня было хорошее улучшение в моей программе. Спасибо, но если какой-нибудь лучший вариант есть, мне интересно.

1

Способ сделать это - создать временную таблицу для хранения всех значений col1 и col2, которые у вас есть. Вставьте значения col1 и 2 в таблицу temp, а затем выполните соединение запроса между таблицей temp и таблицей (я просто делаю для первой части каждого или как бит с 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

Yeh, это хорошая идея. Позвольте мне посмотреть, могу ли я улучшить производительность. Но не создайте лишний багдон, чтобы создать таблицу с несколькими тысячами строк. Снова Спасибо за ваш ответ – awake416

+0

Я бы предположил, что на сервере потребуется меньше ресурсов, так как вы делаете меньше выборок, и вы отправляете на сервер аналогичные объемы данных - либо в коде, либо в моем решении в качестве данных – Mark

Смежные вопросы