是否可以从Sybase函数返回一个数字列表?

时间:2010-05-14 04:37:18

标签: performance function types return sybase-asa

我正在尝试克服一个非常严重的性能问题,其中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上运行。是的我知道它已经过时并且计划刷新,但现在我无能为力,因此我需要能够使用此版本数据库的逻辑。

1 个答案:

答案 0 :(得分:1)

使用临时表存储您的号码怎么样?所以你的sql看起来像这样:

    select kfield into #tmpKfield 
    from littleTable 
    where UNIQUEID = 'STRINGREPOF123'

    select * from bigTable 
    where kfield in (select kfield from #tmpKfield)
    go

    drop table #tmpKfield
    go

这就是我试图解决你的问题的方法。