对于我们的一个项目,我们使用 PostgreSQL 并由于性能优势访问两个具有复杂 SQL 计算的表。
每个表,我们称它们为TableA
和TableB
,有1301个 double 类型的字段(字段数量受PostgreSQL限制!) TableA的字段名称
是:id
, A1
, A2
, ..., A1300
和 for 表 B
:id
,B2
,...,B1300
。
我们正在使用许多动态变化的公式,这些公式可以通过简单的 id
连接直接访问两个表,以对记录中的数字数据进行计算。
示例公式为: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 个索引表的一个数据库请求中工作得很快。 但是随着时间的推移,系统已经长大,所有可用的字段都用完了。
现在,要求对使用的字段数量几乎没有限制,以在一个 SQL select
中容纳 2 个表的更长和更复杂的计算。
我必须承认,我对许多其他新数据库系统及其解决此类问题的能力知之甚少。是否有数据库支持这样的概念或其他方式在数据库中完成这些计算?
旧的方式暂时很灵活,但是有没有更高效的方式来实现同样的逻辑呢?
将数据动态读出到程序中,对其进行解析和计算可能需要更长的时间。
我还认为仅使用另一个允许定义包含超过 1300 个字段的表的数据库将是一个短期解决方案,直到我们需要更多字段。
最佳答案
以我上面的评论为例,对每个值使用数组而不是离散字段:
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;
关于database - 2 个表的 2 个记录之间的计算需要扩展到超过 1300 个字段。如何以及哪个数据库可以实现这一目标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30905590/