PostgreSQL 中表达式索引的实际限制

2024-01-26

我需要使用 HSTORE 类型和键索引来存储数据。

CREATE INDEX ix_product_size ON product(((data->'Size')::INT))
CREATE INDEX ix_product_color ON product(((data->'Color')))
etc.

使用表达式索引有哪些实际限制?就我而言,可能有数百种不同类型的数据,因此有数百种表达式索引。每个插入、更新和选择查询都必须针对这些索引进行处理,以便选择正确的索引。


我从来没有玩过 hstore,但当我需要 EAV 列时我会做类似的事情,例如:

create index on product_eav (eav_value) where (eav_type = 'int');

这样做的限制是您需要在查询中明确地使用它,即该查询不会使用上述索引:

select product_id
from product_eav
where eav_name = 'size'
and eav_value = :size;

但这一个会:

select product_id
from product_eav
where eav_name = 'size'
and eav_value = :size
and type = 'int';

在您的示例中,它可能应该更像是:

create index on product ((data->'size')::int) where (data->'size' is not null);

这应该避免在没有大小条目时添加对索引的引用。根据您使用的 PG 版本,查询可能需要进行如下修改:

select product_id
from products
where data->'size' is not null
and data->'size' = :size;

常规索引和部分索引之间的另一个大区别是后者不能在表定义中强制执行唯一约束。这将成功:

create unique index foo_bar_key on foo (bar) where (cond);

以下情况不会:

alter table foo add constraint foo_bar_key unique (bar) where (cond);

但这会:

alter table foo add constraint foo_bar_excl exclude (bar with =) where (cond);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PostgreSQL 中表达式索引的实际限制 的相关文章

  • 需要按天分割日期时间范围

    我有一个需要根据日期时间拆分的表 输入表 ID Start End A 2019 03 04 23 18 04 2019 03 04 23 21 25 A 2019 03 04 23 45 05 2019 03 05 00 15 14 所需
  • 不带 GROUP BY 的聚合查询

    这个查询似乎在我的旧机器上完美运行 但是 在我的 MySQL 5 7 14 和 PHP 5 6 25 的新机器上 它会抛出错误 致命错误 未捕获异常 PDOException 并带有消息 SQLSTATE 42000 语法错误或访问冲突 1
  • SQL 中基于下一条记录和上一条记录的复杂排序

    这是一个后续问题根据 SQL 中的下一条记录和上一条记录进行排序 https stackoverflow com questions 30477803 sorting based on next and previous records i
  • 在 postgresql 中查找和汇总具有重叠记录的日期范围

    我有一个大型数据集 我想对记录具有重叠时间的计数进行求和 例如 给定数据 id 1 name A start 2018 12 10 00 00 00 end 2018 12 20 00 00 00 count 34 id 2 name B
  • 通过 osql.exe 运行脚本时出现问题

    我尝试以这种格式运行我的软件的更新脚本 osql exe i path to script U 用户 P 密码 S sqlserver 位置 d 数据库名称 n b 大多数脚本的格式相同 并且都以 GO 结尾 其中很多都运行得很好 但随机脚
  • 根据日期顺序排名

    我的数据如下 Heading Date A 2009 02 01 B 2009 02 03 c 2009 02 05 d 2009 02 06 e 2009 02 08 我需要如下排名 Heading Date Rank A 2009 02
  • MySQL中如何声明变量?

    如何在mysql中声明一个变量 以便我的第二个查询可以使用它 我想写一些类似的东西 SET start 1 SET finish 10 SELECT FROM places WHERE place BETWEEN start AND fin
  • JDBC插入实数数组

    我试图将一个真实的数组插入到 postgresql 数组中 该表的定义是 String sqlTable CREATE TABLE IF NOT EXISTS ccmBlock sampleId INTEGER block REAL 插入内
  • 如何识别拼写不同的相似单词

    我想从数据库中过滤掉重复的客户名称 一位客户可能有多个同名但拼写差异不大的系统条目 这是一个示例 名为 Brook 的客户可能有 3 个系统条目 有了这个变化 布鲁克 贝尔塔 布鲁克 贝尔塔 比鲁克 贝尔塔 假设我们将此名称放入一个数据库列
  • 如何在 DB2 中创建返回序列值的函数?

    如何在 DB2 中创建一个从序列中获取值并返回该值的函数 应该可以在 select 或 insert 语句中使用该函数 例如 select my func from xxx insert into xxx values my func 基本
  • C#:编译表达式时已添加具有相同键的项目

    好吧 这是一个棘手的问题 希望这里有一位表达大师能够发现我在这里做错了什么 因为我只是不明白 我正在构建用于过滤查询的表达式 为了简化这个过程 我有几个Expression
  • SQL 连接两个没有关系的表

    我有具有相同结构的不同表 我想通过其中一列将它们连接起来 问题是他们不共享该专栏中的信息 Table 1 Type A Name Value Table 2 Type B Name Value 结果表 在单列中 nameFromA name
  • 从 Getdate() 获取时间

    我想采取Getdate 结果 例如 2011 10 05 11 26 55 000 into 11 26 55 AM 我看过其他地方并发现 Select RIGHT CONVERT VARCHAR GETDATE 100 7 这给了我 11
  • mysql自动存储记录创建时间戳

    mysql 有什么方法可以在创建记录时自动将时间戳存储在记录行中 我试图使用时间戳 数据类型 和 current timestamp 作为默认值 但后来意识到每次更新记录时都会更新 我只需要一些可以存储创建时间戳的东西 Thanks Set
  • 如何使用 BigQuery 有效地选择另一个表中匹配子字符串的记录?

    我有一个包含数百万个字符串的表 我想将其与包含大约两万个字符串的表进行匹配 如下所示 standardSQL SELECT record FROM record JOIN fragment ON record name LIKE CONCA
  • 如何使用 SQL Server 2008 将行复制到同一个表中

    A 到目前为止我的方式 sqlCommand CommandText INSERT Table1 column1 column2 column3 SELECT column1 column2 column3 FROM Table1 WHER
  • 在 DataView 的 RowFilter 中选择 DISTINCT

    我试图根据与另一个表的关系缩小 DataView 中的行范围 我使用的 RowFilter 如下 dv new DataView myDS myTable id IN SELECT DISTINCT parentID FROM myOthe
  • 如何在 pg-promise 中设置模式

    我正在搜索的文档pg 承诺 https github com vitaly t pg promise特别是在创建客户端时 但我无法找到设置连接中使用的默认架构的选项 它始终使用public架构 我该如何设置 通常 为数据库或角色设置默认架构
  • 我是否需要在外键上指定 ON DELETE NO ACTION?

    我有以下与 SQL Server 2012 一起使用的 DDL CREATE TABLE Subject SubjectId INT IDENTITY 1 1 NOT NULL Name NVARCHAR 50 Not NULL CONST
  • 是否可以引用同一个表中的不同列?

    如果博客有一个 类别 表 如下所示 CREATE TABLE categories id INTEGER PRIMARY KEY AUTO INCREMENT parent id INTEGER NOT NULL name VARCHAR

随机推荐

  • 如何调试 Django PayPal IPN?

    我在用着这个 Django 应用程序 http github com johnboxall django paypal实施 PayPal IPN 我正在使用 PayPal 进行测试IPN模拟器 https developer paypal
  • 为什么要避免在 JavaScript 中增加(“++”)和减少(“--”)运算符?

    中的一个提示jslint tool http www jslint com lint html is and The 增量 和 递减 众所周知 操作符会导致不良代码 鼓励过度狡猾 他们 仅次于错误的架构 使病毒和其他 安全威胁 有一个加号
  • Flutter:我需要在StatelessWidget(TextSpan/recognizer)中调用GestureRecognizer.dispose吗?

    我正在阅读此文档页面 https docs flutter io flutter painting TextSpan recognizer html https docs flutter io flutter painting TextSp
  • 如何在 PyOpenGL 上创建一个可以对鼠标移动进行“透视旋转”的相机?

    我正在创建一个第一人称视角 RPG 我想在移动鼠标时在 PyOpenGL 中旋转相机 就像 Minecraft 等其他游戏一样 我可以使用什么函数来执行此操作以及如何执行此操作 我尝试使用gluLookAt 但我不明白它是如何工作的 尽管我
  • 矢量可绘制扭曲

    我有许多使用矢量绘图作为源的图像视图 对于大多数人来说 它是材质图标 但当我导入更复杂的矢量时 它在 Lollipop 设备上显示扭曲 但在 Jellybean 设备上显示得很好 这应该是系统 但显然有问题 Layout
  • 显示带有 html 内容的 smarty 变量

    我有一个 smarty 变量 其中包含 html 内容 如下所示 html strong Content strong br etc etc 我尝试以 html 格式显示它 当显示它像 html 仅显示纯文本 不带格式 我尝试像 html
  • 获取线程CPU使用率

    我有一组消耗 CPU 的执行 每个执行都在低优先级的线程中运行 这些线程将在一个进程 如 IIS 中运行 该进程有许多其他线程 我不想减慢它们的速度 我想计算所有其他线程的 cpu 使用率 如果它大于 50 那么我会暂停其中一个线程 如果它
  • 绘图大小 - 在 IPython Notebook 中使用 ggplot2(通过 rmagic)

    我已经开始将 R 的使用集成到 Notebook 中 从我的角度来看 这是为了两全其美 Python 中的数据管理 同时利用 R 的相对分析 图形优势 不幸的是 我沉迷于一个看似简单的元素 调整 ggplot2 图形的绘图大小 使用 pan
  • 对于不带任何参数的方法来说,显式生命周期有什么意义?

    第 295 页Rust 编程 http shop oreilly com product 0636920040385 do您可以找到以下内容 幸运的是 标准库包含了总体实现 impl lt a T U gt AsRef u for a T
  • 如何打乱键值对?

    我有一组值需要在需要时进行洗牌 我不知道哪种变量类型最适合我 数据实际上是基于key value结构的 比如 100 white 200 black 300 red 就这样 我想做的是根据我还不知道的某种算法来更改键值对 但是它们需要像这样
  • 正则表达式,将多个斜杠替换为一个

    这似乎是一个很容易解决的问题 但它并不像看起来那么容易 我在 PHP 中有这个字符串 postname 这是一个 URL 我不想连续出现多个斜杠 我从来不想完全删除斜线 它应该是这样的 postname 因为结构可能看起来不同 所以我认为我
  • Django ORM 在 Postgres DB 上留下空闲连接

    最近 我的 Django 应用程序由于数据库连接错误而频繁崩溃 OperationalError FATAL sorry too many clients already 当我进入应用程序数据库时 我看到确实有近 100 个打开的连接 所有
  • Powershell 在第一个特殊字符出现后删除文本

    这是我必须解析的值 8 2 4 151 65 HBAAPI I v1 3 3 29 02 我需要删除第一个实例之后的所有内容 包括第一个实例 所以我需要我的最终结果是8 2 4 151 65 s 8 2 4 151 65 HBAAPI I
  • 事件源 -> 服务器批量返回事件流而不是块返回

    我有一个 php 脚本 可以通过验证从 csv 文件导入大数据 为此 我需要向用户展示进度 我为此使用了事件流 当我回显某些内容时 我希望将其一一传输到客户端 而不是服务器批量发送整个输出 我已经尝试过 ob start ob implic
  • 底部图例,两行包裹在 r 中的 ggplot2 中

    library ggplot2 library scales library reshape2 Rdates lt c 2007 01 31 2007 02 28 2007 03 30 2007 04 30 2007 05 31 2007
  • 在 C# 中显示/隐藏主窗体

    我正在开发一个程序 单击 form1 上的按钮将打开 form2 然后我将隐藏 form1 直到 form2 关闭 我遇到的问题是 form2 关闭后无法显示 form1 有想法该怎么解决这个吗 try Form1 ActiveForm H
  • 如何解决 SQLite 数据库的错误路径?

    Overview 我添加了一些代码来将现有数据库复制到设备的本地文件夹 到目前为止第一个条件如果现有数据库尚不存在工作正常 Issue 但是 当执行将现有数据库从解决方案文件夹复制到设备文件夹的代码行时 我收到 SQLite 错误 该错误告
  • 如何使用 ASP Classic 获取当前虚拟目录的名称?

    如何使用 ASP Classic 获取当前虚拟目录的名称 在 ASP NET 中你可以使用Request ApplicationPath找到这个 例如 假设您有一个如下 URL http localhost virtual director
  • Google Tv 模拟器 AVD 系统映像

    您好 我正在尝试在我的 Windows 机器中设置 google tv 模拟器 我能够安装 api level 13 中提供的 google tv add on 但是当我尝试创建 AVD 时 它会抛出错误消息 请安装 intel x86 但
  • PostgreSQL 中表达式索引的实际限制

    我需要使用 HSTORE 类型和键索引来存储数据 CREATE INDEX ix product size ON product data gt Size INT CREATE INDEX ix product color ON produ