我试图克服一个非常严重的性能问题,即 Sybase 拒绝在大表上使用主键索引,因为其中一个必填字段是通过另一个表间接指定的 - 或者换句话说;
SELECT ... FROM BIGTABLE WHERE KFIELD = 123
在 ms 中运行,但
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 上运行。是的,我知道它已经过时并且计划进行更新,但我现在对此无能为力,因此我需要可以与此版本的数据库一起使用的逻辑。