From: | Noah Misch <noah(at)leadboat(dot)com> |
---|---|
To: | pgsql-hackers(at)postgresql(dot)org |
Subject: | texteq/byteaeq: avoid detoast |
Date: | 2010-12-20 18:19:53 |
Message-ID: | 20101220181953.GB29282@tornado.gateway.2wire.net |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
texteq, textne, byteaeq and byteane detoast their arguments, then check for
equality of length. Unequal lengths imply the answer trivially; given equal
lengths, the functions proceed to compare the actual bytes. We can skip
detoasting entirely when the lengths are unequal. The attached patch implements
this. As submitted, it applies atop of my recent strncmp->memcmp patch, but
they are logically independent. To benchmark some optimal and pessimal cases, I
used the attached "bench-skip-texteq.sql". It uses a few datum sizes and varies
whether the length check succeeds:
bench-skip-texteq.sql, 10 MiB nomatch: 58.4s previous, 0.00664s patched
bench-skip-texteq.sql, 144 B match: 73.0s previous, 71.9s patched
bench-skip-texteq.sql, 3 B match: 68.8s previous, 67.3s patched
bench-skip-texteq.sql, 3 B nomatch: 45.0s previous, 46.0s patched
The timing differences in the smaller-length test cases are probably not
statistically significant.
Thanks,
nm
Attachment | Content-Type | Size |
---|---|---|
varlena-avoid-detoast.patch | text/plain | 5.1 KB |
bench-skip-texteq.sql | text/plain | 2.5 KB |
From | Date | Subject | |
---|---|---|---|
Next Message | Tom Lane | 2010-12-20 18:24:04 | Re: MingW and MiniDumps |
Previous Message | Noah Misch | 2010-12-20 18:10:42 | strncmp->memcmp when we know the shorter length |