• Mattias Jonsson's avatar
    Bug#48846: Too much time spent in ha_partition::records_in_range if not able to prune · 87349334
    Mattias Jonsson authored
    Problem was that ha_partition::records_in_range called
    records_in_range for all non pruned partitions, even if
    an estimate should be given.
    
    Solution is to only use 1/3 of the partitions (up to 10) for
    records_in_range and estimate the total from this subset.
    (And continue until a non zero return value from the called
    partitions records_in_range is given, since 0 means no rows
    will match.)
    
    sql/ha_partition.cc:
      Bug#48846: Too much time spent in ha_partition::records_in_range if not able to prune
      
      estimate_rows_upper_bound and records_in_range are very similar
      (the only difference is the function and its parameters to use)
      so I created a common function for this.
      
      Since these calls from the optimizer are only estimates, it is
      not neccesary to call them for every partition, it can use
      a much smaller subset of the used partitions instead,
      which improves performance for selects.
    sql/ha_partition.h:
      Bug#48846: Too much time spent in ha_partition::records_in_range if not able to prune
      
      Added two private functions to help some
      optimizer calls.
    87349334
ha_partition.cc 194 KB