pgsql: Improve worst-case performance of text_position_get_match_pos()

From: John Naylor <john(dot)naylor(at)postgresql(dot)org>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: Improve worst-case performance of text_position_get_match_pos()
Date: 2022-02-04 15:57:18
Message-ID: E1nG0xa-0005QF-E8@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Improve worst-case performance of text_position_get_match_pos()

This function converts a byte position to a character position after
a successful string match. Rather than calling pg_mblen() in a loop,
use pg_mbstrlen_with_len() since the latter can inline its own call to
pg_mblen(). When the string match is at the end of the haystack text, this
change results in 10-20% performance improvement, depending on platform and
typical character length in bytes. This also simplifies the code a little.

Specializing for UTF-8 could result in further improvement, but the
performance gain was not found to be reliable between platforms. The modest
gain in this commit is stable between platforms and usable by all server
encodings.

Discussion:
https://www.postgresql.org/message-id/CAFBsxsH1Yutrmu+6LLHKK8iXY+vG--Do6zN+2900spHXQNNQKQ@mail.gmail.com

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/b31e3f561365136b48d63e8561f32b697df16d1d

Modified Files
--------------
src/backend/utils/adt/varlena.c | 28 +++++-----------------------
1 file changed, 5 insertions(+), 23 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Tom Lane 2022-02-04 19:55:09 pgsql: First-draft release notes for 14.2.
Previous Message Thomas Munro 2022-02-04 03:18:33 pgsql: Track LLVM 14 API changes, up to 2022-01-30.