Hi Rong,

I've discovered one possible issue:

in MySQL, records_in_range() call is defined as:

  virtual ha_rows records_in_range(uint inx [[maybe_unused]],
                                   key_range *min_key [[maybe_unused]],
                                   key_range *max_key [[maybe_unused]])

in MariaDB, it is:

  virtual ha_rows records_in_range(uint inx, const key_range *min_key,
                                   const key_range *max_key,
                                   page_range *res)

Note the page_range parameter. It is an "OUT" parameter, it is defined
as:

  /* Store first and last leaf page accessed by records_in_range */
  typedef struct st_page_range
  { 
    ulonglong first_page;
    ulonglong last_page;
  } page_range;
 

The storage engine provides the SQL layer with information about how "far
apart" the ranges are in the index. The SQL layer uses that information
when computing the overall costs in handler::multi_range_read_info_const().

The commit that added this in MariaDB:
http://github.com/mariadb/server/commit/f36ca142f7fa59598e34e842b60372b963067766

I'm not sure how big the impact of this is.

BR
 Sergei
-- 
Sergei Petrunia, Software Developer
MariaDB Corporation | Blog: http://petrunia.net


_______________________________________________
discuss mailing list -- discuss@lists.mariadb.org
To unsubscribe send an email to discuss-le...@lists.mariadb.org

Reply via email to