在 PostgreSQL 中,关于 citext 性能的奇怪问题?

2023-11-30

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(使用前将#替换为@)

在 PostgreSQL 中,关于 citext 性能的奇怪问题? 的相关文章

  • 搜索多个表 (SQL)

    我需要能够有一个 SQL 查询来使用简单的搜索来搜索我的数据库 这是我的表格现在的样子 Table artists id name Table albums id artistID name Table songs id albumID n
  • 当您执行“SELECT *”时,SQL Server 如何确定列的顺序?

    当您执行以下操作时 SQL Server 如何确定列的顺序SELECT 我知道 订购依据 对于订购至关重要data 但我预计列名保持一致 注意 我的代码是not取决于返回列的实际顺序 我只想知道 SQL Server 如何决定对列名进行排序
  • PostgreSQL:循环直到条件为真

    我正在尝试编写一个查询 该查询从指定值开始 循环 数据库 直到条件为真 例如 假设我在 TABLE 示例中有以下条目 id parent cond 1 True 2 1 False 3 1 False 4 2 False 我想要一个以 4
  • 如何限制mySQL中的搜索和替换字符串

    我用它来搜索和替换 mySQL 中的字符串 UPDATE products SET prodname REPLACE prodname S S 这些产品包含诸如 TYLENOL TABS 100 S 之类的字符串 我想将其转换为 TYLEN
  • 如何在此查询中获取以 KM 为单位的距离

    salons Salon select salons gt selectRaw 6371 acos cos radians cos radians lat cos radians lng radians sin radians sin ra
  • MySQL中如何重置表的自增列

    我有一张桌子 它的第一列sl是自动递增的 填充表格后 我删除了前两行 第一个条目有sl1 是否可以重置为1维持AI 我正在使用 PHP MyAdmin ALTER TABLE tablename AUTO INCREMENT 1
  • 如何使用索引更改表的列?

    我想将带有某些索引的表中 a 列的列大小从 varchar 200 更改为 varchar 8000 我应该如何进行 既然是VARCHAR你正在增加尺寸 然后简单地ALTER TABLE ALTER COLUMN https learn m
  • sql连接一个表中的两个字段

    我有一个预订表 其中有两个人 我想将 person 1 作为一行返回 将 person 2 作为新行返回 但该人的 id 与人员表相关 这是我所得到的 但没有提取预订信息 SELECT people FROM select booking
  • 如何获取 PostgreSQL 中表上所有索引的列名列表?

    我有这个查询来获取表上的索引列表 SELECT ns nspname as schema name tab relname as table name cls relname as index name am amname as index
  • SQL Server:删除具有外键约束的行:事务可以覆盖约束吗?

    我有一些添加了外键约束的表 它们与代码生成一起使用 以在生成的存储过程中设置特定的联接 是否可以通过在事务中调用多个删除来覆盖这些约束 特别是 C 中的 TransactionScope 或者绝对需要级联删除吗 不要使用级联删除 这样可能会
  • PostgreSQL不使用PostGIS计算两点之间的距离

    当纬度和经度位于表格中的两个单独列中时 如何计算两点之间的距离 我无法使用 PostGIS 因为我使用 heroku Postgres 免费版本 你可以使用这样的东西 select SQRT POW 69 1 latitude float
  • 如果我没有可在 T-SQL PIVOT 中用作聚合函数的列怎么办?

    正如这里所见 http www tsqltutorials com pivot php http www tsqltutorials com pivot php 如果我没有可以执行 SUM 的列怎么办 如何获得数据透视表结果 总有COUNT
  • 需要在SQL Server 2012中自动递增字符串

    考虑 SQL Server 2012 中的表 789 0000000 上面的数字在 SQL Server 2012 中将被视为字符串 但每当我更新记录时 我都需要增加到 1 例如 当我更新记录 1 时 它应该增加到789 0000001 当
  • 如何在 BigQuery/SQL 中将行转置为包含大量数据的列?

    我在将 BigQuery 中的大量数据表 15 亿行 从行转置为列时遇到问题 我可以弄清楚如何在硬编码时使用少量数据来完成此操作 但是对于如此大量的数据 该表的快照如下所示 CustomerID Feature Value 1 A123 3
  • 多人/单人测验游戏的数据库设计

    我在这里看到了很多问题 但没有人适合我的问题 我正在尝试创建一个可扩展的 ER 模型 如果我想添加更多数据 则不会破坏几乎任何东西 所以我尝试创建的是 有两种类型的用户 比如说管理员和工作人员 他们有不同的角色 管理员可以对问题进行 CRU
  • 当日期有时间时,访问查询将不起作用

    我有一个查询 select from tblClient where IntakeDate 5 31 2011 我确实知道有 8 条记录有该日期 但此查询没有提取任何具有该日期的记录 这 8 条记录有时间和 短日期 例如 5 31 2011
  • Rails 5.2.2(活动记录)WITH 语句

    我正在使用 Rails 5 2 2 并且有一个使用 WITH 语句的复杂查询 我需要使用左外连接创建该语句 我该如何做WITH活动记录中的语句 我的 TOTAL PROFILES 由查询对象驱动 并且会发生变化 而其余部分将始终保持不变 所
  • PostgreSQL docker:“无法绑定 IPv6 套接字:无法分配请求的地址”

    编辑2 经过很长一段时间 解决了 请参阅下面的答案 编辑 我很遗憾地说 从昨天到今天 问题 自行 消失了 而我没有做任何事情 在这里学习很棒的非确定性课程 额外的乐趣 无法绑定 IPv6 套接字 错误仍然出现在错误日志中 因此这可能根本不是
  • 将 SQL 变量传递给 ASP

    这里只是有点语法问题 我正在使用 SQL 和 ASP 并且到目前为止有以下代码 set rs Server CreateObject ADODB recordset rs Open Select from Questions conn sq
  • 如何在Redshift中进行分层随机样本?

    我需要对从不同类别购买商品的客户进行随机抽样 有8个类别 订单分布在其中 如果我想对已购买的客户进行随机抽样 但保持每个类别的订单比例相同 我将如何在我的 sql 代码中进行设置 下面的表格强调了这一点 它不包括客户数据 我希望我的客户列表

随机推荐

  • 如何获取在 javascript 中发起请求的 ID 更新面板

    我想知道在 JavaScript 中发起请求的 ID 更新面板 我编写了这个脚本 但它返回undefined var prm Sys WebForms PageRequestManager getInstance prm add initi
  • 表示同一实体的名称

    以下定义声明区域 每个名称都在程序文本的某个部分中引入 称为 声明区域 这是程序中最大的部分 该名称是有效的 也就是说 该名称可以用作 指代同一实体的非限定名称 我们在下面的规范中有示例 int j 24 int main int i j
  • 如何获取Windows上每个线程的CPU使用率(win32)

    寻找 Win32 API 函数 C 或 Delphi 示例代码 它们可以告诉我线程 而不是进程的总时间 的 CPU 使用率 百分比和 或总 CPU 时间 我有线程 ID 我知道 Sysinternals Process Explorer 可
  • 如何使用phpmyadmin将Excel文件导入mysql数据库

    我想通过 phpmyadmin 导入选项从 Excel 工作表格式 xls 导入到 mysql 数据库 据我所知 我们需要先将格式转换为csv格式 然后才能导入到phpmyadmin 但不幸的是 如果我更改为 csv 某些特殊字符或符号将变
  • 在固定不同 CPU 的 2 个线程之间传递一些变量的最佳方式

    我有一个问题需要了解是否有更好的解决方案 我编写了以下代码 将一些变量从编写器线程传递到读取器线程 这些线程固定到共享相同 L2 缓存的不同 CPU 禁用超线程 writer thread h struct a few vars uint3
  • 如何访问位图图像中的每个字节

    假设我有一个位图图像 是否可以迭代图像中的所有单个字节 如果是 怎么办 我找到了这个 http channel9 msdn com forums TechOff 108813 Bitmap to byte array 说你可以使用 Memo
  • 按对象属性对(对象)列表进行排序

    我正在努力实现一些已经给出答案的事情 但它在c 我对此一无所知c 所以我正在寻找 vb net 的替代品 我制造了一个class called BomItem它有几个属性 如数量 描述等 我添加这些BomItems into a List
  • 如何删除会话cookie?

    如何通过 jQuery 动态删除会话 cookie 而无需手动重新启动浏览器 我在某处读到会话 cookie 保留在浏览器内存中 并且在浏览器关闭时将被删除 sessionFooCookie is session cookie this c
  • @ManagedBean(name="foo") 在 EL #{foo} 中无法按其名称使用

    我试图在 JSF2 中使用应用程序范围的 bean 但由于某种原因它总是null在我的请求作用域 bean 中 这是我正在使用的代码 应用程序作用域 bean ManagedBean eager true name applicationT
  • 我使用 for 为数组分配一个值,但是当我打印数组时,它只使用整个数组中的最后一个值

    我使用大小为 8 8 的数组类创建了一个数组 并使用 fill 用虚拟对象填充它 之后我创建了一个 for 并分配了值 但是当我打印数组时 所有字段都有相同的值 var gridSize 8 const colorname Red Oran
  • Echarts如何在条形图上的特定条形之间添加垂直虚线?

    我正在使用 Echarts 并创建了一个条形图 我正在尝试添加两条垂直虚线来分隔Source3 and Source4和另一条垂直虚线以显示分离SourceSix and SourceSeven 我试过乱搞markLine到一个酒吧并添加一
  • R - 生成二进制向量的所有可能的成对组合

    我正在寻找一种智能方法来生成长度为 n 的两个向量的所有成对组合 其中只有一个值不为零 现在我正在做一些非常绝望的事情 循环遍历每个组合 n 这就是我所追求的 例如 n 3 1 2 3 1 1 0 0 2 0 1 0 1 1 0 0 2 0
  • ChartJS 3.0 中的generateLegend() 发生了什么?

    我的理解是3 0版本已经贬值了 是否有其他方法可以轻松完成图例的定制 是的 有一种非常简单的方法可以使用以下命令向 ChartJS 3 5 添加自定义图例plugins 下面是它如何工作的示例 创建 DOM 结构以支持新的图例和 Chart
  • 如何在Python中将日期时间转换为字符串?

    我想用这段代码制作折线图 df pd DataFrame from dict sentencess sentencess publishedAts publishedAts hasil sentimens hasil sentimens d
  • 将对 Laravel Controller 的请求路由到正在运行的 WebSocket 服务器

    情况 有一个长时间运行的任务需要异步启动 此任务的细节实际上并不是那么重要 基础知识是要配置多个虚拟机和复杂的网络设置 并且这是由将在不同服务器上运行的 python 脚本处理的 我们决定使用 WebSockets 在 Web 服务器和客户
  • 在Dispose(bool)方法实现中,不应该将成员设置为null吗?

    没有任何讨论的指南 注释 文章IDisposable模式建议应该将内部成员设置为null in the Dispose bool 方法 特别是如果它们是占用内存的野兽 在调试内部基准测试工具时 我开始意识到它的重要性 过去发生的情况是 有一
  • 验证 XSD 本身

    谁能告诉我如何验证 XSD 文件本身 不是针对 XSD 的 XML 我检查了许多论坛和网站 包括 SO 其中大多数都引用了某些或其他在线验证器 但这对我们来说不是一次性检查 我们的应用程序涉及使用 XSD 的 XSL 转换 因此我们需要确定
  • 检测两个数字相加时是否发生无符号整数溢出

    这是我的实现 用于检测尝试添加两个数字时是否发生无符号整数溢出 我的系统上 unsigned int UINT MAX 的最大值是 4294967295 int check addition overflow unsigned int a
  • 允许 VB.NET 应用程序将 Excel 文件转换为数据表

    我的 VB NET 应用程序目前允许我将 CSV 文件转换为数据表 这要归功于以下提供的代码David在这个问题中我发布了 上一个问题 现在我尝试允许将 XLSX 文件导入到数据表中 目前代码如下所示 Private Function Co
  • 在 PostgreSQL 中,关于 citext 性能的奇怪问题?

    In PostgreSQL 手册它说citext只是一个实现的模块TEXT调用的数据类型LOWER citext模块提供了不区分大小写的字符串类型 citext 本质上 它在比较值时在内部调用 lower 否则 它的行为几乎与文本完全相同