# include/check_qep.inc # # SUMMARY # # Designed to be used together with include/expect_qep.inc # # $query should be assigned a select statement using # straight_join to force the tables to be joined in most # optimal order. # # expect_qep.inc will then store the estimated 'Last_query_cost' # and total # 'Handler_read%' for this straight_joined query. # # We should then assign a non-straight_join'ed version of # the same query to $query and execute it using # 'include/check_qep.inc'. Its estimated cost and # #handler_reads will then be verified against the # previous straight_joined query. # # USAGE # # let $query= ; # --source include/check_qep.inc # # EXAMPLE # t/greedy_optimizer.test # flush status; eval EXPLAIN $query; --disable_ps2_protocol eval $query; --enable_ps2_protocol let $cost= query_get_value(SHOW STATUS LIKE 'Last_query_cost', Value, 1); --disable_warnings let $reads= `select sum(variable_value) from information_schema.session_status where VARIABLE_NAME like 'Handler_read%'`; --enable_warnings #echo Cost: $cost, Handler_reads: $reads; if ($cost != $best_cost) { echo ### FAILED: Query_cost: $cost, expected: $best_cost ###; } # Difference in handler reads are ok as tables in MariaDB are sorted according # to order in the query and the tables in greedy_optimizer.inc has reference to # rows that does not exists, so different table orders will do different # number of reads if ($reads != $best_reads) { echo ### NOTE: Handler_reads: $reads, expected: $best_reads ###; }