在PostgreSQL手册中,它说它citext
只是一个TEXT
通过调用实现数据类型的模块LOWER()
:
citext模块提供不区分大小写的字符串类型citext.从本质上讲,它在比较值时内部调用较低.否则,它的行为几乎与文本完全相同.
另一方面,在文件结束时,它说:
citext不如文本有效,因为运算符函数和B树比较函数必须复制数据并将其转换为小写以进行比较.但是,使用lower来获得不区分大小写的匹配稍微有效一点.
所以我很困惑,如果它使用它LOWER()
怎么能"比使用更低的效率略高"?
它不会调用SQL函数lower
.正如文档所说,它基本上是 内部调用lower
.
调用发生在实现citext
比较操作的C函数内.而不是实际调用lower
,他们直接进入底层str_tolower()
例程.您可以在源代码中自己看到这一点,在这种情况下,大多数都相对容易理解.
因此,您或多或少地保存的是每次比较两个SQL函数调用的开销.与比较本身的成本相比,这并不是无关紧要的,但在典型查询中,您可能从未注意到其中任何一项成本.