Я пытаюсь преодолеть очень серьезную проблему с производительностью, когда Sybase отказывается использовать индекс первичного ключа для большой таблицы, потому что одно из обязательных полей указано косвенно через другую таблицу — или, другими словами;
SELECT ... FROM BIGTABLE WHERE KFIELD = 123
работает в мс, но
SELECT ... FROM BIGTABLE, LTLTBL WHERE KFIELD = LTLTBL.LOOKUP
AND LTLTBL.UNIQUEID = 'STRINGREPOF123'
занимает 30-40 секунд.
Мне удалось обойти эту первую проблему, используя функцию, которая в основном позволяет мне это сделать;
SELECT ... FROM BIGTABLE WHERE KFIELD = MYFUNC('STRINGREPOF123')
который также работает в ms.
Проблема, однако, в том, что этот подход работает только тогда, когда есть одно значение, возвращаемое MYFUNCT, но у меня есть некоторые случаи, когда он может возвращать 2 или 3 значения.
Я знаю, что SQL
SELECT ... FROM BIGTABLE WHERE KFIELD IN (123,456,789)
также возвращает в миллисекундах, поэтому я хотел бы иметь функцию, которая возвращает список возможных значений, а не только одно - возможно ли это?
К сожалению, приложение работает на Sybase ASA 9. Да, я знаю, что оно устарело и его планируется обновить, но сейчас я ничего не могу с этим поделать, поэтому мне нужна логика, которая будет работать с этой версией БД.