mirror of
https://github.com/postgres/postgres.git
synced 2025-04-24 10:47:04 +03:00
Fix mark-and-restore-skipping test case to not be a self-join.
There isn't any good reason for this test to be a self-join rather than a join between separate tables, except that it saved a couple of SQL commands for setup. A proposed patch to optimize away self-joins breaks the test, so adjust it to avoid that happening. Discussion: https://postgr.es/m/64486b0b-0404-e39e-322d-0801154901f3@postgrespro.ru
This commit is contained in:
parent
0c7d537930
commit
24d08f3c0a
@ -5932,22 +5932,26 @@ left join j2 on j1.id1 = j2.id1 where j1.id2 = 1;
|
|||||||
set enable_nestloop to 0;
|
set enable_nestloop to 0;
|
||||||
set enable_hashjoin to 0;
|
set enable_hashjoin to 0;
|
||||||
set enable_sort to 0;
|
set enable_sort to 0;
|
||||||
-- create an index that will be preferred over the PK to perform the join
|
-- create indexes that will be preferred over the PKs to perform the join
|
||||||
create index j1_id1_idx on j1 (id1) where id1 % 1000 = 1;
|
create index j1_id1_idx on j1 (id1) where id1 % 1000 = 1;
|
||||||
explain (costs off) select * from j1 j1
|
create index j2_id1_idx on j2 (id1) where id1 % 1000 = 1;
|
||||||
inner join j1 j2 on j1.id1 = j2.id1 and j1.id2 = j2.id2
|
-- need an additional row in j2, if we want j2_id1_idx to be preferred
|
||||||
|
insert into j2 values(1,2);
|
||||||
|
analyze j2;
|
||||||
|
explain (costs off) select * from j1
|
||||||
|
inner join j2 on j1.id1 = j2.id1 and j1.id2 = j2.id2
|
||||||
where j1.id1 % 1000 = 1 and j2.id1 % 1000 = 1;
|
where j1.id1 % 1000 = 1 and j2.id1 % 1000 = 1;
|
||||||
QUERY PLAN
|
QUERY PLAN
|
||||||
--------------------------------------------
|
-----------------------------------------
|
||||||
Merge Join
|
Merge Join
|
||||||
Merge Cond: (j1.id1 = j2.id1)
|
Merge Cond: (j1.id1 = j2.id1)
|
||||||
Join Filter: (j1.id2 = j2.id2)
|
Join Filter: (j1.id2 = j2.id2)
|
||||||
-> Index Scan using j1_id1_idx on j1
|
-> Index Scan using j1_id1_idx on j1
|
||||||
-> Index Scan using j1_id1_idx on j1 j2
|
-> Index Scan using j2_id1_idx on j2
|
||||||
(5 rows)
|
(5 rows)
|
||||||
|
|
||||||
select * from j1 j1
|
select * from j1
|
||||||
inner join j1 j2 on j1.id1 = j2.id1 and j1.id2 = j2.id2
|
inner join j2 on j1.id1 = j2.id1 and j1.id2 = j2.id2
|
||||||
where j1.id1 % 1000 = 1 and j2.id1 % 1000 = 1;
|
where j1.id1 % 1000 = 1 and j2.id1 % 1000 = 1;
|
||||||
id1 | id2 | id1 | id2
|
id1 | id2 | id1 | id2
|
||||||
-----+-----+-----+-----
|
-----+-----+-----+-----
|
||||||
|
@ -2014,15 +2014,20 @@ set enable_nestloop to 0;
|
|||||||
set enable_hashjoin to 0;
|
set enable_hashjoin to 0;
|
||||||
set enable_sort to 0;
|
set enable_sort to 0;
|
||||||
|
|
||||||
-- create an index that will be preferred over the PK to perform the join
|
-- create indexes that will be preferred over the PKs to perform the join
|
||||||
create index j1_id1_idx on j1 (id1) where id1 % 1000 = 1;
|
create index j1_id1_idx on j1 (id1) where id1 % 1000 = 1;
|
||||||
|
create index j2_id1_idx on j2 (id1) where id1 % 1000 = 1;
|
||||||
|
|
||||||
explain (costs off) select * from j1 j1
|
-- need an additional row in j2, if we want j2_id1_idx to be preferred
|
||||||
inner join j1 j2 on j1.id1 = j2.id1 and j1.id2 = j2.id2
|
insert into j2 values(1,2);
|
||||||
|
analyze j2;
|
||||||
|
|
||||||
|
explain (costs off) select * from j1
|
||||||
|
inner join j2 on j1.id1 = j2.id1 and j1.id2 = j2.id2
|
||||||
where j1.id1 % 1000 = 1 and j2.id1 % 1000 = 1;
|
where j1.id1 % 1000 = 1 and j2.id1 % 1000 = 1;
|
||||||
|
|
||||||
select * from j1 j1
|
select * from j1
|
||||||
inner join j1 j2 on j1.id1 = j2.id1 and j1.id2 = j2.id2
|
inner join j2 on j1.id1 = j2.id1 and j1.id2 = j2.id2
|
||||||
where j1.id1 % 1000 = 1 and j2.id1 % 1000 = 1;
|
where j1.id1 % 1000 = 1 and j2.id1 % 1000 = 1;
|
||||||
|
|
||||||
reset enable_nestloop;
|
reset enable_nestloop;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user