Я пытаюсь преодолеть очень серьезную проблему производительности, из-за которой 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')
, который также работает в мс.
Однако проблема в том, что этот подход работает только тогда, когда MYFUNCT
возвращает единственное значение, но у меня есть несколько случаев, когда он может возвращать 2 или 3 значения.
Я знаю, что SQL
SELECT ... FROM BIGTABLE WHERE KFIELD IN (123,456,789)
также возвращает в миллисекундах, поэтому я хотел бы иметь функцию, которая возвращает список возможных значений, а не только одно - это возможно?
К сожалению, приложение работает на Sybase ASA 9. Да, я знаю, что оно старое и его обновление планируется, но сейчас я ничего не могу с этим поделать, поэтому мне нужна логика, которая будет работать с этой версией БД.