radixsort_tiny_optimizeation.diff
application/octet-stream
Filename: radixsort_tiny_optimizeation.diff
Type: application/octet-stream
Part: 1
Message:
Re: tuple radix sort
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: unified
| File | + | − |
|---|---|---|
| src/backend/utils/sort/tuplesort.c | 10 | 4 |
diff --git a/src/backend/utils/sort/tuplesort.c b/src/backend/utils/sort/tuplesort.c
index 028c5b71c27..5185d8403d5 100644
--- a/src/backend/utils/sort/tuplesort.c
+++ b/src/backend/utils/sort/tuplesort.c
@@ -2834,6 +2834,13 @@ radix_sort_tuple(SortTuple *begin, size_t n_elems, int level, Tuplesortstate *st
{
uint8 idx = remaining_partitions[i];
+ /* count sorted partitions */
+ if (partitions[idx].offset == partitions[idx].next_offset)
+ {
+ num_remaining--;
+ continue;
+ }
+
for (SortTuple *st = begin + partitions[idx].offset;
st < begin + partitions[idx].next_offset;
st++)
@@ -2841,6 +2848,9 @@ radix_sort_tuple(SortTuple *begin, size_t n_elems, int level, Tuplesortstate *st
size_t offset = partitions[st->current_byte].offset++;
SortTuple tmp;
+ //if (offset == (size_t) (st - begin))
+ // continue; /* already in correct position */
+
/* swap current tuple with destination position */
Assert(offset < n_elems);
tmp = *st;
@@ -2849,10 +2859,6 @@ radix_sort_tuple(SortTuple *begin, size_t n_elems, int level, Tuplesortstate *st
CHECK_FOR_INTERRUPTS();
};
-
- /* count sorted partitions */
- if (partitions[idx].offset == partitions[idx].next_offset)
- num_remaining--;
}
}