Skip to content

Instantly share code, notes, and snippets.

@krlmlr
Last active December 18, 2015 09:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save krlmlr/5761307 to your computer and use it in GitHub Desktop.
Save krlmlr/5761307 to your computer and use it in GitHub Desktop.
DROP TABLE IF EXISTS ind1_2000 CASCADE;
CREATE TABLE ind1_2000 (id integer, ind1 float);
ALTER TABLE ind1_2000 ADD PRIMARY KEY (id);
INSERT INTO ind1_2000 VALUES (1, 0.0);
INSERT INTO ind1_2000 VALUES (2, 0.3);
INSERT INTO ind1_2000 VALUES (3, 1.1);
VACUUM ANALYZE ind1_2000;
DROP TABLE IF EXISTS ind2_2000 CASCADE;
CREATE TABLE ind2_2000 (id integer, ind2 float);
ALTER TABLE ind2_2000 ADD PRIMARY KEY (id);
INSERT INTO ind2_2000 VALUES (1, 0.0);
INSERT INTO ind2_2000 VALUES (2, 0.3);
INSERT INTO ind2_2000 VALUES (3, 1.1);
VACUUM ANALYZE ind2_2000;
DROP TABLE IF EXISTS ind3_2000 CASCADE;
CREATE TABLE ind3_2000 (id integer, ind3 float);
ALTER TABLE ind3_2000 ADD PRIMARY KEY (id);
INSERT INTO ind3_2000 VALUES (1, 0.0);
INSERT INTO ind3_2000 VALUES (2, 0.3);
INSERT INTO ind3_2000 VALUES (3, 1.1);
VACUUM ANALYZE ind3_2000;
DROP TABLE IF EXISTS id CASCADE;
CREATE TABLE id (id integer PRIMARY KEY);
INSERT INTO id VALUES (1);
INSERT INTO id VALUES (2);
INSERT INTO id VALUES (3);
VACUUM ANALYZE id;
DROP VIEW IF EXISTS ind_2000 CASCADE;
CREATE VIEW ind_2000 AS SELECT id, ind1, ind2, ind3
FROM id
LEFT JOIN ind1_2000 USING (id)
LEFT JOIN ind2_2000 USING (id)
LEFT JOIN ind3_2000 USING (id);
EXPLAIN ANALYZE SELECT id, ind1, ind2 FROM ind_2000;
DROP TABLE IF EXISTS ind1 CASCADE;
CREATE TABLE ind1 (year integer, id integer, ind1 float);
ALTER TABLE ind1 ADD PRIMARY KEY (year, id);
INSERT INTO ind1 VALUES (2000, 1, 0.0);
INSERT INTO ind1 VALUES (2000, 2, 0.3);
INSERT INTO ind1 VALUES (2000, 3, 1.1);
INSERT INTO ind1 VALUES (2001, 1, 0.0);
INSERT INTO ind1 VALUES (2001, 2, 0.3);
INSERT INTO ind1 VALUES (2001, 3, 1.1);
INSERT INTO ind1 VALUES (2002, 1, 0.0);
INSERT INTO ind1 VALUES (2002, 2, 0.3);
INSERT INTO ind1 VALUES (2002, 3, 1.1);
VACUUM ANALYZE ind1;
DROP TABLE IF EXISTS ind2 CASCADE;
CREATE TABLE ind2 (year integer, id integer, ind2 float);
ALTER TABLE ind2 ADD PRIMARY KEY (year, id);
INSERT INTO ind2 VALUES (2000, 1, 0.0);
INSERT INTO ind2 VALUES (2000, 2, 0.3);
INSERT INTO ind2 VALUES (2000, 3, 1.1);
INSERT INTO ind2 VALUES (2001, 1, 0.0);
INSERT INTO ind2 VALUES (2001, 2, 0.3);
INSERT INTO ind2 VALUES (2001, 3, 1.1);
INSERT INTO ind2 VALUES (2002, 1, 0.0);
INSERT INTO ind2 VALUES (2002, 2, 0.3);
INSERT INTO ind2 VALUES (2002, 3, 1.1);
VACUUM ANALYZE ind2;
DROP TABLE IF EXISTS ind3 CASCADE;
CREATE TABLE ind3 (year integer, id integer, ind3 float);
ALTER TABLE ind3 ADD PRIMARY KEY (year, id);
INSERT INTO ind3 VALUES (2000, 1, 0.0);
INSERT INTO ind3 VALUES (2000, 2, 0.3);
INSERT INTO ind3 VALUES (2000, 3, 1.1);
INSERT INTO ind3 VALUES (2001, 1, 0.0);
INSERT INTO ind3 VALUES (2001, 2, 0.3);
INSERT INTO ind3 VALUES (2001, 3, 1.1);
INSERT INTO ind3 VALUES (2002, 1, 0.0);
INSERT INTO ind3 VALUES (2002, 2, 0.3);
INSERT INTO ind3 VALUES (2002, 3, 1.1);
VACUUM ANALYZE ind3;
DROP TABLE IF EXISTS id CASCADE;
CREATE TABLE id (id integer PRIMARY KEY);
INSERT INTO id VALUES (1);
INSERT INTO id VALUES (2);
INSERT INTO id VALUES (3);
VACUUM ANALYZE id;
DROP VIEW IF EXISTS ind_2000 CASCADE;
CREATE VIEW ind_2000 AS SELECT id, ind1, ind2, ind3
FROM (SELECT id, 2000 AS year FROM id) T
LEFT JOIN ind1 USING (year, id)
LEFT JOIN ind2 USING (year, id)
LEFT JOIN ind3 USING (year, id);
EXPLAIN ANALYZE SELECT id, ind1, ind2 FROM ind_2000;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment