On Thu, Sep 4, 2008 at 9:48 PM, Alex Hunsaker <[EMAIL PROTECTED]> wrote:
Ok here are the results: (data generated from the c program before) select count(1) from test_hash; count ----------- 100000011 create index test_hash_num_idx on test_hash using hash (num); CVS: Time: 698065.180 ms patch: Time: 565982.099 ms ./pgbench -c 1 -t 100000 -n -f bench.sql bench.sql select count(1) from test_hash where num = 110034304728896610; CVS: tps = 7232.375875 (excluding connections establishing) patch: tps = 7913.700150 (excluding connections establishing) EXPLAIN ANALYZE select count(1) from test_hash where num = 110034304728896610; QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------ Aggregate (cost=29.24..29.25 rows=1 width=0) (actual time=0.066..0.067 rows=1 loops=1) -> Index Scan using test_hash_num_idx on test_hash (cost=0.00..29.24 rows=1 width=0) (actual time=0.051..0.054 rows=1 loops=1) Index Cond: (num = 110034304728896610::bigint) Total runtime: 0.153 ms Oddly the index sizes were the same (4096 MB) is that to be expected? Here is the change I made to hashint8 --- a/src/backend/access/hash/hashfunc.c +++ b/src/backend/access/hash/hashfunc.c @@ -61,12 +61,14 @@ hashint8(PG_FUNCTION_ARGS) */ #ifndef INT64_IS_BUSTED int64 val = PG_GETARG_INT64(0); - uint32 lohalf = (uint32) val; +/* uint32 lohalf = (uint32) val; uint32 hihalf = (uint32) (val >> 32); lohalf ^= (val >= 0) ? hihalf : ~hihalf; return hash_uint32(lohalf); +*/ + return val % 4294967296; #else /* here if we can't count on "x >> 32" to work sanely */ return hash_uint32((int32) PG_GETARG_INT64(0)); -- Sent via pgsql-patches mailing list (pgsql-patches@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-patches