On 02/10/2014 09:52 PM, M Putz wrote:
Hello, While analyzing performance, we encountered the following phenomenon, SELECT sum(pow(.5*generate_series,.5)) FROM generate_series(1,1000000); is much much (a hundred times) slower than SELECT sum(pow(random()*generate_series,.5)) FROM generate_series(1,1000000); and asymptotic difference is even more astounding. This seems counter-intuitive, considering the cost of an additional random() call instead of a constant factor. What are the reasons for this strange performance boost?
Different data type. The first uses numeric, which is pretty slow for doing calculations. random() returns a double, which makes the pow and sum to also use double, which is a lot faster.
To see the effect, try these variants: SELECT sum(pow(.5::float8 * generate_series,.5)) FROM generate_series(1,1000000); SELECT sum(pow(random()::numeric * generate_series,.5)) FROM generate_series(1,1000000); - Heikki -- Sent via pgsql-performance mailing list (pgsql-performance@xxxxxxxxxxxxxx) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-performance