mirror of https://github.com/citusdata/citus.git
65 lines
2.6 KiB
SQL
65 lines
2.6 KiB
SQL
-- test geqo
|
|
CREATE SCHEMA geqo_schema;
|
|
SET search_path TO geqo_schema;
|
|
|
|
CREATE TABLE dist (a int, b int);
|
|
SELECT create_distributed_table('dist', 'a');
|
|
INSERT INTO dist VALUES (1, 1), (2, 2), (3, 3);
|
|
|
|
CREATE TABLE dist2 (a int, b int);
|
|
SELECT create_distributed_table('dist2', 'a');
|
|
INSERT INTO dist2 VALUES (1, 1), (2, 2), (3, 3);
|
|
|
|
SET geqo_threshold TO 2;
|
|
SET geqo_pool_size TO 1000;
|
|
SET geqo_generations TO 1000;
|
|
|
|
SET citus.enable_repartition_joins to ON;
|
|
|
|
SELECT count(*) FROM dist d1 LEFT JOIN dist2 d2 ON d1.a = d2.a LEFT JOIN dist d3 ON d3.a = d2.a;
|
|
|
|
-- JOINs with CTEs:
|
|
WITH cte_1 AS (SELECT * FROM dist OFFSET 0)
|
|
SELECT count(*) FROM dist d1 LEFT JOIN dist2 d2 ON d1.a = d2.a LEFT JOIN dist d3 ON d3.a = d2.a LEFT JOIN cte_1 ON true;
|
|
|
|
WITH cte_1 AS (SELECT * FROM dist OFFSET 0),
|
|
cte_2 AS (SELECT * FROM dist2 OFFSET 0),
|
|
cte_3 AS (SELECT * FROM dist OFFSET 0)
|
|
SELECT count(*) FROM cte_1 d1 LEFT JOIN cte_2 d2 ON d1.a = d2.a LEFT JOIN cte_3 d3 ON d3.a = d2.a LEFT JOIN cte_1 ON true;
|
|
|
|
-- Inner JOIN:
|
|
SELECT count(*) FROM dist d1 JOIN dist2 d2 ON d1.a = d2.a JOIN dist d3 ON d3.a = d2.a;
|
|
|
|
-- subquery join
|
|
SELECT count(*) FROM (SELECT *, random() FROM dist) as d1 JOIN (SELECT *, random() FROM dist2) d2 ON d1.a = d2.a JOIN (SELECT *, random() FROM dist) as d3 ON d3.a = d2.a;
|
|
SELECT count(*) FROM (SELECT *, random() FROM dist) as d1 LEFT JOIN (SELECT *, random() FROM dist2) d2 ON d1.a = d2.a LEFT JOIN (SELECT *, random() FROM dist) as d3 ON d3.a = d2.a;
|
|
|
|
-- router query
|
|
SELECT count(*) FROM dist d1 LEFT JOIN dist2 d2 ON d1.a = d2.a LEFT JOIN dist d3 ON d3.a = d2.a WHERE d1.a = 1 AND d2.a = 1 AND d3.a = 1;
|
|
|
|
-- fast path router query
|
|
SELECT count(*) FROM dist WHERE a = 1;
|
|
|
|
-- simple INSERT
|
|
INSERT INTO dist (a) VALUES (1);
|
|
|
|
-- repartition join, probably not relevant, but still be defensive
|
|
SELECT count(*) FROM dist d1 JOIN dist2 d2 ON d1.b = d2.b JOIN dist d3 ON d3.b = d2.b;
|
|
|
|
-- update query with join
|
|
UPDATE dist SET b = foo.a FROM (SELECT d1.a FROM dist d1 JOIN dist2 d2 USING(a)) foo WHERE foo.a = dist.a RETURNING *;
|
|
|
|
-- insert select via repartitioning
|
|
INSERT INTO dist (a) SELECT max(d1.b) FROM dist d1 JOIN dist2 d2 ON d1.a = d2.a JOIN dist d3 ON d3.a = d2.a GROUP BY d1.a;
|
|
SELECT count(*) FROM dist;
|
|
|
|
-- insert select pushdown
|
|
INSERT INTO dist SELECT d1.* FROM dist d1 JOIN dist2 d2 ON d1.a = d2.a JOIN dist d3 ON d3.a = d2.a WHERE d1.b < 2 AND d2.b < 2;
|
|
SELECT count(*) FROM dist;
|
|
|
|
-- insert select via coordinator
|
|
INSERT INTO dist SELECT d1.* FROM dist d1 JOIN dist2 d2 ON d1.a = d2.a JOIN dist d3 ON d3.a = d2.a WHERE d1.b < 2 AND d2.b < 2 OFFSET 0;
|
|
SELECT count(*) FROM dist;
|
|
|
|
DROP SCHEMA geqo_schema CASCADE;
|