必要なフィールドの 1 つが別のテーブルを介して間接的に指定されているため (つまり、;
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')
これもミリ秒で実行されます。
ただし、問題は、このアプローチは返される値が 1 つの場合にのみ機能することですが、MYFUNCT2 つまたは 3 つの値が返される場合もあります。
私はそのSQLを知っています
SELECT ... FROM BIGTABLE WHERE KFIELD IN (123,456,789)
また、ミリ秒単位で返されるので、単一の値ではなく、可能な値のリストを返す関数が必要です-これは可能ですか?
悲しいことに、アプリケーションは Sybase ASA 9 で実行されています。はい、それが古く、更新される予定であることはわかっていますが、今は何もできないので、このバージョンの DB で動作するロジックが必要です。