texteq/byteaeq: avoid detoast
Noah Misch <noah@leadboat.com>
From: Noah Misch <noah@leadboat.com>
To: pgsql-hackers@postgresql.org
Date: 2010-12-20T18:19:53Z
Lists: pgsql-hackers
Attachments
- varlena-avoid-detoast.patch (text/plain) patch
- bench-skip-texteq.sql (text/plain)
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