postgreSQL查询具有相同列的几个非常大的表,如何优化它及其代码

时间:2017-01-11 03:43:59

标签: postgresql

我正在从表a1,a2,...,a20运行以下“简单查询”。每个表a1,a2,....,a20有几百万行,每个表都有相同的列,X,Y,Z。

CREATE TABLE A_bis as
SELECT
  X,  Y,  Z
FROM a1
WHERE
Y= 3
UNION
SELECT
  X,  Y,  Z
FROM a2
WHERE
Y= 3
UNION
SELECT
  X,  Y,  Z
FROM a3
WHERE
Y= 3
UNION
...
SELECT
  X,  Y,  Z
FROM a20
WHERE
Y= 3

我得到了表A_bis,但至少需要20分钟。 我想:

a)优化查询,使其更快。

b)改进代码(循环?)所以我不必为每个表a1,.... a20写一行7行来获得130行代码

1 个答案:

答案 0 :(得分:1)

评论已回答您的问题A(基本上:在每个aX表上添加索引)。

对于问题B,您可以使用PostgreSQL inheritance

CREATE TABLE aParent (x INT, y INT, z INT);
ALTER TABLE a1 INHERITS aParent;
ALTER TABLE a2 INHERITS aParent;
...
ALTER TABLE a20 INHERITS aParent;

然后你可以做

SELECT X, Y, Z FROM aParent WHERE Y = 3;