maria-developers team mailing list archive
-
maria-developers team
-
Mailing list archive
-
Message #12293
97e932919bd: MDEV-22665: Print ranges in the optimizer trace created for non-indexed columns when optimizer_use_condition_selectivity >2
Hi Varun,
Please find some minor comments below. Ok to push when addressed.
> revision-id: 97e932919bd53b854e0cea0d0001d185d7e63cc0 (mariadb-10.4.11-199-g97e932919bd)
> parent(s): 0a5668f5128c731a346abf41afdc6fed33164ffc
> author: Varun Gupta
> committer: Varun Gupta
> timestamp: 2020-05-26 22:36:03 +0530
> message:
>
> MDEV-22665: Print ranges in the optimizer trace created for non-indexed columns when optimizer_use_condition_selectivity >2
>
> Now the optimizer trace shows the ranges constructed while getting estimates from EITS
>
> ---
> mysql-test/main/opt_trace.result | 94 ++++++++++++++++++++++++++++++
> mysql-test/main/opt_trace.test | 18 ++++++
> sql/field.cc | 40 +++++++++++++
> sql/field.h | 1 +
> sql/opt_range.cc | 123 ++++++++++++++++++++++++++++-----------
> 5 files changed, 241 insertions(+), 35 deletions(-)
...
> diff --git a/sql/opt_range.cc b/sql/opt_range.cc
> index 66c870dd2ac..2cef483ef28 100644
> --- a/sql/opt_range.cc
> +++ b/sql/opt_range.cc
> @@ -15804,6 +15821,38 @@ void QUICK_GROUP_MIN_MAX_SELECT::dbug_dump(int indent, bool verbose)
>
> #endif /* !DBUG_OFF */
>
> +
> +/*
> + @brief Print the comparison operator for the min range
> +*/
> +
> +static void print_min_range_operator(String *out, const key_range key)
Do you really need to pass the whole struct key_range by value here?
I think passing key.flag would be sufficient.
> +{
> + if (key.flag == HA_READ_AFTER_KEY)
> + out->append(STRING_WITH_LEN(" < "));
> + else if (key.flag == HA_READ_KEY_EXACT ||
> + key.flag == HA_READ_KEY_OR_NEXT)
> + out->append(STRING_WITH_LEN(" <= "));
> + else
> + out->append(STRING_WITH_LEN(" ? "));
> +}
> +
> +
> +/*
> + @brief Print the comparison operator for the max range
> +*/
> +
> +static void print_max_range_operator(String *out, const key_range key)
> +{
Same as with print_min_range_operator: pass key.flag instead.
> + if (key.flag == HA_READ_BEFORE_KEY)
> + out->append(STRING_WITH_LEN(" < "));
> + else if (key.flag == HA_READ_AFTER_KEY)
> + out->append(STRING_WITH_LEN(" <= "));
> + else
> + out->append(STRING_WITH_LEN(" ? "));
> +}
> +
> +
> static
> void print_range(String *out, const KEY_PART_INFO *key_part,
> KEY_MULTI_RANGE *range, uint n_key_parts)
BR
Sergei
--
Sergei Petrunia, Software Developer
MariaDB Corporation | Skype: sergefp | Blog: http://s.petrunia.net/blog