2 个表的 2 个记录之间的计算需要扩展到超过 1300 个字段。如何以及哪个数据库可以实现这一目标?

Calculations between 2 records of 2 tables need to extend to more then 1300 fields. How and which database can achieve this?

对于我们的一个项目,我们正在使用 PostgreSQL 并访问两个 table,由于性能优势,它们具有复杂的 SQL 计算。

每个 table,让我们称它们为 TableATableB,有 1301 个双精度类型的字段(字段数量受 PostgreSQL 限制!)字段名称对于 TableA 是:idA1A2、...、A1300 对于 TableBidB2, ..., B1300.

我们正在使用许多动态变化的公式,这些公式可以通过简单的 id 连接直接访问两个 table,对记录中的数字数据进行计算。

示例公式为:A99 * ((A1 * B3) / (B5 * B88))

所以程序可以简单地采用公式并直接在其 SQL 中使用它,例如:

select A99 * ((A1 * B3) / (B5 * B88)) as ResultValue
from TableA A
join TableB B on A.id = B.id

这在对 2 个索引 table 的 1 个数据库请求中工作得很快。 但是随着时间的推移,系统已经长大,所有可用的字段都用完了。

现在,要求是对使用的字段数量几乎没有限制,以在 2 table 秒的 SQL select 中容纳更长更复杂的计算. 我必须承认,我对许多其他新数据库系统及其解决此类问题的能力知之甚少。是否有数据库支持这样的概念或其他方式在数据库中完成这些计算? 旧的方式暂时很灵活,但是有没有更高效的方式来实现同样的逻辑呢? 将数据动态读出到程序中,对其进行解析和计算可能需要更长的时间。 我还认为仅使用另一个允许使用超过 1300 个字段定义 tables 的数据库将是一个短期解决方案,直到我们需要更多字段。

作为我上面评论的示例,对每个值使用数组而不是离散字段:

create table tablea (
  id int not null,
  a numeric[]
);    

create table tableb (
  id int not null,
  b numeric[]
);

insert into tablea
select 2, array (select generate_series(1,10000));

insert into tableb
select 2, array (select generate_series(1,10000));


select
  A[99] * ((A[1] * B[3]) / (B[5] * B[88])) 
from
  tablea
  join tableb on
    tablea.id = tableb.id
where
  tablea.id = 2;