texteq/byteaeq: avoid detoast

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
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.


Attachment Content-Type Size
varlena-avoid-detoast.patch text/plain 5.1 KB
bench-skip-texteq.sql text/plain 2.5 KB


Browse pgsql-hackers by date

  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