Hello Jorgen,
As you found out, in the previous review, three of my comments can be
ignored.
I made a new review of the latest commit, please find below some more
comments.
Jorgen Loland a écrit, Le 05.01.2011 14:48:
> #At
> file:///export/home/jl208045/mysql/wl4800/mysql-next-mr-opt-backporting-wl4800-range-subselect/
> based on revid:guilhem@stripped
>
> 3247 Jorgen Loland 2011-01-05
> WL#4800: Optimizer trace/debugger
>
> Fix tracepoints so that all mtr test cases can be traced without
> JSON syntax errors.
>
> Added DYNAMIC_RANGE and REPEATED_SUBSELECT tracing features to
> avoid repeated tracing of range analysis and execution,
> respectively, of subselects.
> @ sql/item_subselect.cc
> Added Item_subselect::executed_before used to avoid tracing of
> subquery execution when this happens repeatedly for each record
> in outer select.
> @ sql/item_subselect.h
> Added Item_subselect::executed_before used to avoid tracing of
> subquery execution when this happens repeatedly for each record
> in outer select.
> @ sql/opt_range.cc
> Add tracepoints to range optimizer
> @ sql/sql_select.cc
> Add tracepoints to range optimizer
>
> modified:
> mysql-test/r/mysqld--help-notwin.result
> mysql-test/r/optimizer_trace2.result
> mysql-test/r/optimizer_trace_charset.result
> mysql-test/r/optimizer_trace_no_prot.result
> mysql-test/r/optimizer_trace_ps_prot.result
this ps_prot.result has not been updated enough, test fails. Suggestion
for next commit: comparing ps_prot.result and no_prot.result to see
whether some oddity has appeared.
> === modified file 'mysql-test/r/optimizer_trace_range.result'
> --- a/mysql-test/r/optimizer_trace_range.result 2011-01-03 20:36:18 +0000
> +++ b/mysql-test/r/optimizer_trace_range.result 2011-01-05 13:48:15 +0000
> +EXPLAIN SELECT STRAIGHT_JOIN * FROM t1, t2
> +WHERE t1.key1=t2.key1a AND t1.key2 > 1020 {
> "steps": [
> {
In this trace we have empty "semijoin_strategy_choice" objects coming
from advance_sj_state(). In greedy_search(), the call is under "if
(has_sj)" so we don't see "semijoin_strategy_choice" if there is no
semijoin. Could you please add the same if(has_sj) in
optimize_straight_join()?
> === modified file 'mysql-test/t/optimizer_trace_range.test'
> +--echo
> +# Make quick select for ordering inside test_if_skip_sort_order
> +EXPLAIN SELECT * FROM t1 WHERE b BETWEEN 1 AND 2 ORDER BY b,a;
> +--echo
> +SELECT * FROM information_schema.OPTIMIZER_TRACE;
In this trace, the mentioned quick select
("records_estimation_for_index_ordering") appears 3 times in
join_optimization and once in join_execution. Do you have an idea why we
call it so many times? That's just my curiosity.
Update: I think you just sent a mail to the team about this.