问题标签 [partial-index]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
37 浏览

postgresql - 如果我的索引是部分的,它会在性能/索引大小上产生明显的不同吗?

假设我有一个包含 2000 万行的表,我想像这样索引:

现在假设只有 2% 的水果有颜色,其余的都是NULL。我的查询永远不会想找到有颜色NULL(没有颜色)的水果,所以问题是,如果我将索引更改为,它会对 postgresql 产生影响:

我对 postgresql 处理索引的内部方式了解不多,所以这就是我问的原因。

PS postgresql版本是9.2

0 投票
1 回答
393 浏览

arrays - Mongo的数组中的唯一部分索引如何工作

Mongo 部分过滤器是在文档范围内工作还是能够应用于每个单独的数组项?

用例:

架构

我有一个唯一索引,说明 Source 和 SourceId 应该是唯一的。这意味着没有两个文档和单个文档可以具有相同的 Source 和 SourceId。

我需要将其设为部分键,因为有时 SourceId 尚不存在。所以我想添加过滤器: {"references.sourceId" : {"$exists" : true}}

但是一个文档可能在一个文档上有多个引用——一个带有 sourceId,一个没有。我希望带有 sourceId 的数组项被索引,而没有被忽略的数组项。

这样做的正确方法是什么?如果过滤器必须是文档范围的,是否有任何方法可以指定在任何引用缺少 sourceId 时忽略文档?目前 mongo 不接受部分索引过滤器的运算符中的逻辑否定。

0 投票
1 回答
1758 浏览

postgresql - 时间戳与当前时间的部分索引

我有一个查询,我通过比较五个月前的插入时间戳来过滤行。

该字段不会更新,如果有帮助,我们可能会认为它是不可变的。

并且EXPLAIN ANALYZE VERBOSE

似乎 PostgreSQL 在字段上执行序列扫描,这增加了成本。

我是否有机会创建 B-tree 部分索引或其他任何东西来优化该查询?

0 投票
1 回答
75 浏览

java - 有时会使用唯一索引插入重复数据

我确实有一个partialFilterExpression集合上的唯一索引,但有时会插入重复的数据。

索引创建

getIndicies命令中的索引

重复的文件

MongoDb 版本:3.2.7,似乎也发生在 3.2.12

旁注:在转储和恢复集合时,duplicate key error会抛出a

为什么有时可以插入重复数据以及如何避免这种情况?

更新

我创建了一个 MongoDb 问题https://jira.mongodb.org/browse/SERVER-28153

0 投票
1 回答
486 浏览

python - sqlalchemy 的通用部分索引支持

根据这个问题,SQLAlchemy - 用于测试的 SQLite 和用于开发的 Postgresql - 如何移植?

我意识到,(以上)共识是不要使用未在生产中使用的数据库进行测试

我想抽象对sqlalchemy的部分索引支持,这样我就可以使用 Postgres 或 Sqlite。

我已经看到了,PostgreSQL我可以使用

但我看到https://sqlite.org/partialindex.html也支持部分索引sqlite

是否有某种对sqlalchemy的通用部分索引支持,我的模块可以用于 postgres 或 sqlite 数据库?

0 投票
3 回答
653 浏览

postgresql - 简单的 WHERE EXISTS ... ORDER BY ... PostrgeSQL 中的查询非常慢

我有这个非常简单的查询,由我的 ORM(实体框架核心)生成:

  1. 有 2 个“is_active”记录。其他涉及的列(“id”)是主键。查询正好返回 4 行。
  2. 表 1 是 9600 万条记录。
  3. 表 2 是 3000 万条记录。
  4. 此查询中涉及的 3 列已编入索引(is_active、id、table2_id)。
  5. 生成这个简单查询的 C#/LINQ 代码是:Table2.Where(t => t.IsActive).Include(t => t.Table1).ToList();`
  6. SET STATISTICS 10000设置为所有 3 列。
  7. VACUUM FULL ANALYZE在两张桌子上运行。

如果没有该ORDER BY子句,查询会在几毫秒内返回,我不希望返回 4 条记录。解释输出:

WITHORDER BY子句,查询需要5分钟完成!解释输出:

内部的第一个索引扫描应返回不超过 2 行。然后外部的第二个索引扫描没有任何意义,因为它的成本为 4563070 和 103961040 行。它只需要匹配 2 行table2和 4 行table1

这是一个非常简单的查询,返回的记录很少。为什么 Postgres 无法正确执行它?

0 投票
2 回答
2113 浏览

postgresql - 在 Postgresql 中执行 upsert 时,在 ON CONFLICT 子句中未使用部分索引

我有以下实体属性值表:

此表中的示例条目是:

因此,在任何时间点,对于任何给定的键,应该只存在 1 个真正的 is_active 条目。

我在此表上运行以下 upsert 语句:

但是,它失败了:

我想知道为什么它不使用唯一的部分索引key_value_pair_key_if_is_active_true_unique

如果我在任何时间点放开“ ,对于任何给定的键,应该只存在 1 个真正的 is_active 条目”子句并将索引更改为:

我在 Postgres 网站上阅读了 ON CONFLICT 子句将使用部分索引的文档。我想知道为什么在这种情况下不使用它。我在这里错过了什么,或者我犯了什么错误?

0 投票
2 回答
262 浏览

mongodb - MongoDB 计算部分索引项

我在一个看起来像这样的集合上有一个部分索引:

我只想计算已被此部分索引索引的项目数,以检查它是否正常工作。有没有办法做到这一点?还是有另一种好方法来检查部分索引对所有内容的索引?

0 投票
0 回答
157 浏览

arrays - 嵌套数组中的部分唯一索引

我的文件是这样的:

a.u如果它存在,我想创建唯一索引:

文档将按如下方式编入索引:

问题来了a.u,两条记录都有一个,所以部分过滤器表达式匹配两条记录。a.u但两者在数组中也有一个空元素,null因此我得到了重复键的错误null

有什么办法可以解决这个问题吗?或者我必须更改架构?

0 投票
0 回答
323 浏览

mongodb - 高效查询具有异构模式的 MongoDB 集合

我正在使用 NodeJS、MongoDB 和 Mongoose 开发一个 Web 应用程序。它旨在充当用户和大数据环境之间的接口。这个想法是用户可以在一个单独的集群中执行大数据过程,并将结果存储在一个 MongoDB 集合Results中。此集合可为每位用户存储超过 100 万份文档。

此集合的文档架构在用户之间可能完全不同。例如,我们有user1user2。和Results集合中的文档示例:user1user2

我在 Web 应用程序中实现了一个搜索引擎,以便每个用户都可以根据他们的文档模式在字段中进行过滤(例如,user1我必须能够通过inputFields.variable1user2by进行过滤outputFields.cost)。当然我知道我必须使用索引,否则查询会很慢。

我的第一次尝试是为Results集合中的每个不同字段创建一个索引,但是效率很低,因为由于索引的大小,数据库服务器变得不稳定。所以我的第二次尝试是尝试通过使用部分索引来减少索引的数量,以便我在选项中创建指定用户 ID 的索引partialFilterExpression

问题是,如果另一个用户在Results集合中与任何其他用户具有相同的架构,并且我尝试为该用户创建索引,MongoDB 会抛出此异常:

Index with pattern: { inputFields.country: 1 } already exists with different options

发生这种情况是因为部分索引无法索引相同的字段,即使它们partialFilterExpression不同。

所以我的问题是:我怎样才能让用户在这个环境中有效地查询他们的结果?MongoDB真的适合这个用例吗?

谢谢