Ele não chama a função SQL
lower
. Como a documentação diz, é essencialmente internamente chama lower
. As chamadas acontecem dentro das funções C que implementam o
citext
operações de comparação. E em vez de realmente chamar lower
, eles vão diretamente para o str_tolower()
subjacente rotina. Você pode ver isso no código-fonte , a maioria dos quais é relativamente fácil de seguir neste caso. Então, o que você está economizando, mais ou menos, é a sobrecarga de duas chamadas de função SQL por comparação. O que não é insignificante, comparado com o custo da comparação em si, mas você provavelmente nunca notaria nenhum deles ao lado dos outros custos em uma consulta típica.