gpt4 book ai didi

sql - Postgres - 获取多个表中所有行的最快方法

转载 作者:行者123 更新时间:2023-11-29 14:15:02 25 4
gpt4 key购买 nike

SELECT table_1.time, table_1.time, table_2.time FROM table_1 
INNER JOIN table_2 on table_1.time = table_2.time
INNER JOIN table_3 on table_1.time = table_3.time
...;

我正在使用上面的查询语法来查询多个表中的所有行,连接来自不同表的列,然后返回。但是,随着表中行数的增加和表数量的增加,性能会大幅下降。有什么办法可以优化查询性能吗?每个表大约有 0.1 - 100 万行。

我听说过索引、分区和 SSD 等术语,但我真的是 Postgres 的新手,不确定该看哪一个。任何人都可以提供一些比我目前拥有的更好的查询命令语法,或者提供一些关于编辑我的数据库结构的详细建议吗?

编辑:加载页面时只获取一次所有数据。所以我试图加载数据库中存在的所有数据以可视化图表。生成初始图后,页面将仅查询每个表的最后一行以更新图。表结构非常简单。

Table 1: SPM1

time | spm1 |
------------------------------
2018-09-05 22:23:52 | 43.21 |

Table 2: SPM2
time | spm2 |
------------------------------
2018-09-05 22:23:52 | 43.21 |

...大约有 30 个表

谢谢,

最佳答案

这里有一些想法可以根据您提到的内容进行改进。

是否可以将所有表格都变成一个三列的表格?

create table spm (
id serial primary key,
time datetime not null,
spm numeric(5,2) not null,
number smallint not null
);

insert into spm (time, spm, number)
values ('2018-09-05 22:23:52', 43.21, 1),
('2018-09-05 22:23:52', 43.21, 2)

这将大大简化查询。联接是高效的,但 20 个联接有点多。

select time, spm, number from spm;

Fetching all data happens only once when loading a page. So I'm trying to load all the data that's present in DB to visualize plots. After the initial plot is generated, the page will be querying only the last rows of each table to update the plots.

如果这些图被缓存并定期重新生成或更新,这将是一个巨大的性能改进,不仅对于数据库查询,而且对于生成图的所有时间。

关于sql - Postgres - 获取多个表中所有行的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52194803/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com