From: Bruce Momjian Date: Wed, 25 May 2005 22:59:33 +0000 (+0000) Subject: At the head of wchareq, length of (multibyte) character is compared by X-Git-Url: http://git.postgresql.org/gitweb/static/gitweb.js?a=commitdiff_plain;h=2de3c98ad61112a97b07c6e9883d97efc2ecb2ec;p=users%2Fbernd%2Fpostgres.git At the head of wchareq, length of (multibyte) character is compared by using pg_mblen. Therefore, pg_mblen is executed many times, and it becomes a bottleneck. This patch makes a short cut, and reduces execution frequency of pg_mblen by comparing the first byte first. a_ogawa --- diff --git a/src/backend/utils/adt/like.c b/src/backend/utils/adt/like.c index eb6018498a..367dd69dea 100644 --- a/src/backend/utils/adt/like.c +++ b/src/backend/utils/adt/like.c @@ -50,12 +50,18 @@ static text *MB_do_like_escape(text *, text *); static int wchareq(unsigned char *p1, unsigned char *p2) { - int l; + int p1_len; - l = pg_mblen(p1); - if (pg_mblen(p2) != l) + /* Optimization: quickly compare the first byte. */ + if(*p1 != *p2) return (0); - while (l--) + + p1_len = pg_mblen(p1); + if (pg_mblen(p2) != p1_len) + return (0); + + /* They are the same length */ + while (p1_len--) { if (*p1++ != *p2++) return (0);