-- Cycle Query Cn SELECT DISTINCT e1.n1 FROM graph_100_5940 e1, graph_100_5940 e2, graph_100_5940 e3, graph_100_5940 e4, graph_100_5940 e5 WHERE e1.n2 = e2.n1 AND e2.n2 = e3.n1 AND e3.n2 = e4.n1 AND e4.n2 = e5.n1 AND e5.n2 = e1.n1 -- Cycle Query Cn -- First Optimization -- The query engine chooses a plan where it joins on the one hand 3 steps, -- on the other hand 2 steps, and then combines these two intermediate -- results into the final result by a sort merge join. -- Here, we have pushed the duplicate elimination into the intermediate -- results. SELECT DISTINCT e123.n1 FROM ( SELECT DISTINCT e1.n1, e3.n2 FROM graph_100_5940 e1, graph_100_5940 e2, graph_100_5940 e3 WHERE e1.n2 = e2.n1 AND e2.n2 = e3.n1 ) e123, ( SELECT DISTINCT e4.n1, e5.n2 FROM graph_100_5940 e4, graph_100_5940 e5 WHERE e4.n2 = e5.n1 ) e45 WHERE e123.n2 = e45.n1 AND e123.n1 = e45.n2 -- Cycle Query Cn -- Second Optimization -- This query will be executed the engine as by the algorithm we developed.