|
From: Dmitry Y. <di...@us...> - 2008-11-23 12:48:54
|
Build Version : T2.5.0.21424 Firebird 2.5 Alpha 1 (writeBuildNum.sh,v 1.21585 2008/11/23 12:48:48 dimitr Exp ) Update of /cvsroot/firebird/firebird2/src/jrd In directory fdv4jf1.ch3.sourceforge.com:/tmp/cvs-serv1910 Modified Files: Tag: B2_1_Release Optimizer.cpp Log Message: A better solution for CORE-2200 (Extremely slow executing a cross join of 3 tables in Firebird 2.X). This time an optimizer level one. Index: Optimizer.cpp =================================================================== RCS file: /cvsroot/firebird/firebird2/src/jrd/Optimizer.cpp,v retrieving revision 1.78.2.3 retrieving revision 1.78.2.4 diff -b -U3 -r1.78.2.3 -r1.78.2.4 --- Optimizer.cpp 8 Oct 2008 11:48:02 -0000 1.78.2.3 +++ Optimizer.cpp 23 Nov 2008 12:48:47 -0000 1.78.2.4 @@ -2871,8 +2871,7 @@ innerStream[i]->stream = streams[i + 1]; } - // Cardinalities are calculated in OPT_compile() - //calculateCardinalities(); + calculateCardinalities(); calculateStreamInfo(); } @@ -2906,19 +2905,21 @@ * ************************************** * - * Get the cardinality for every stream. + * Get the cardinality for every stream (if not estimated yet). * **************************************/ for (size_t i = 0; i < innerStreams.getCount(); i++) { CompilerScratch::csb_repeat* csb_tail = &csb->csb_rpt[innerStreams[i]->stream]; fb_assert(csb_tail); + if (!csb_tail->csb_cardinality) { jrd_rel* relation = csb_tail->csb_relation; fb_assert(relation); const Format* format = CMP_format(tdbb, csb, (USHORT)innerStreams[i]->stream); fb_assert(format); csb_tail->csb_cardinality = OPT_getRelationCardinality(tdbb, relation, format); } + } } @@ -3123,8 +3124,13 @@ if (!innerStreams[i]->used) { remainingStreams++; if (innerStreams[i]->independent()) { + if (!optimizer->opt_best_count || + innerStreams[i]->baseCost < optimizer->opt_best_cost) + { optimizer->opt_streams[0].opt_best_stream = innerStreams[i]->stream; optimizer->opt_best_count = 1; + optimizer->opt_best_cost = innerStreams[i]->baseCost; + } } } } |