Re: qsort again (was Re: [PERFORM] Strange Create Index behaviour)

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: qsort again (was Re: [PERFORM] Strange Create Index behaviour)
Дата
Msg-id 21615.1140052893@sss.pgh.pa.us
обсуждение исходный текст
Ответ на Re: qsort again (was Re: [PERFORM] Strange Create Index  (Ron <rjpeace@earthlink.net>)
Ответы Re: qsort again (was Re: [PERFORM] Strange Create Index  (Ron <rjpeace@earthlink.net>)
Список pgsql-hackers
Ron <rjpeace@earthlink.net> writes:
> How are we choosing our pivots?

See qsort.c: it looks like median of nine equally spaced inputs (ie,
the 1/8th points of the initial input array, plus the end points),
implemented as two rounds of median-of-three choices.  With half of the
data inputs zero, it's not too improbable for two out of the three
samples to be zeroes in which case I think the med3 result will be zero
--- so choosing a pivot of zero is much more probable than one would
like, and doing so in many levels of recursion causes the problem.

I think.  I'm not too sure if the code isn't just being sloppy about the
case where many data values are equal to the pivot --- there's a special
case there to switch to insertion sort, and maybe that's getting invoked
too soon.  It'd be useful to get a line-level profile of the behavior of
this code in the slow cases...

            regards, tom lane

В списке pgsql-hackers по дате отправления:

Предыдущее
От: Tom Lane
Дата:
Сообщение: Re: qsort again (was Re: [PERFORM] Strange Create Index behaviour)
Следующее
От: Peter Eisentraut
Дата:
Сообщение: Generating config stuff from single source