diff options
author | Igor Babaev <igor@askmonty.org> | 2012-09-01 14:21:59 -0700 |
---|---|---|
committer | Igor Babaev <igor@askmonty.org> | 2012-09-01 14:21:59 -0700 |
commit | a6b88f1431238152643e41979ce10b9bbdac2a82 (patch) | |
tree | 42482ef66f3c59b255d299fc58ace8c1b0c518ea /mysys | |
parent | 5a86a61219826aadf8d08cbc447fe438f2bf50c3 (diff) | |
download | mariadb-git-a6b88f1431238152643e41979ce10b9bbdac2a82.tar.gz |
MDEV-415: Back-port of the WL task #1393 from the mysql-5.6 code line.
The task adds a more efficient handling of the queries with
ORDER BY order LIMIT n, such that n is small enough and
no indexes are used for order.
Diffstat (limited to 'mysys')
-rw-r--r-- | mysys/mf_radix.c | 5 | ||||
-rw-r--r-- | mysys/mf_sort.c | 2 |
2 files changed, 6 insertions, 1 deletions
diff --git a/mysys/mf_radix.c b/mysys/mf_radix.c index 582ca76b8f8..2df1220acdd 100644 --- a/mysys/mf_radix.c +++ b/mysys/mf_radix.c @@ -25,6 +25,11 @@ /* Radixsort */ +my_bool radixsort_is_appliccable(uint n_items, size_t size_of_element) +{ + return size_of_element <= 20 && n_items >= 1000 && n_items < 100000; +} + void radixsort_for_str_ptr(uchar **base, uint number_of_elements, size_t size_of_element, uchar **buffer) { uchar **end,**ptr,**buffer_ptr; diff --git a/mysys/mf_sort.c b/mysys/mf_sort.c index 9ef02787716..b2c58c26624 100644 --- a/mysys/mf_sort.c +++ b/mysys/mf_sort.c @@ -23,7 +23,7 @@ void my_string_ptr_sort(uchar *base, uint items, size_t size) #if INT_MAX > 65536L uchar **ptr=0; - if (size <= 20 && items >= 1000 && items < 100000 && + if (radixsort_is_appliccable(items, size) && (ptr= (uchar**) my_malloc(items*sizeof(char*),MYF(0)))) { radixsort_for_str_ptr((uchar**) base,items,size,ptr); |