In PostgreSQL 手册它说citext
只是一个实现的模块TEXT
调用的数据类型LOWER()
:
citext模块提供了不区分大小写的字符串类型,
citext。本质上,它在比较值时在内部调用 lower。
否则,它的行为几乎与文本完全相同。
另一方面,在文档的末尾它说:
citext 不如 text 高效,因为运算符功能和
B 树比较函数必须复制数据并
将其转换为小写以进行比较。然而,这有点
比使用 lower 获得不区分大小写的匹配更有效。
所以我很困惑它是否使用LOWER()
怎么可能“比使用lower稍微高效一点”呢?
它不调用 SQL 函数lower
。正如文档所说,它本质上 内部 calls lower
.
这些调用发生在实现以下功能的 C 函数内citext
比较操作。而不是实际打电话lower
,他们直接进入底层str_tolower()
常规。您可以在源代码,在这种情况下,其中大部分内容相对容易理解。
因此,您或多或少节省的是每次比较两次 SQL 函数调用的开销。与比较本身的成本相比,这并不是微不足道的,但在典型查询中,您可能永远不会注意到它们与其他成本旁边的任何一个。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)