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