问题标签 [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.
postgresql - 如果我的索引是部分的,它会在性能/索引大小上产生明显的不同吗?
假设我有一个包含 2000 万行的表,我想像这样索引:
现在假设只有 2% 的水果有颜色,其余的都是NULL
。我的查询永远不会想找到有颜色NULL
(没有颜色)的水果,所以问题是,如果我将索引更改为,它会对 postgresql 产生影响:
我对 postgresql 处理索引的内部方式了解不多,所以这就是我问的原因。
PS postgresql版本是9.2
arrays - Mongo的数组中的唯一部分索引如何工作
Mongo 部分过滤器是在文档范围内工作还是能够应用于每个单独的数组项?
用例:
架构
我有一个唯一索引,说明 Source 和 SourceId 应该是唯一的。这意味着没有两个文档和单个文档可以具有相同的 Source 和 SourceId。
我需要将其设为部分键,因为有时 SourceId 尚不存在。所以我想添加过滤器: {"references.sourceId" : {"$exists" : true}}
但是一个文档可能在一个文档上有多个引用——一个带有 sourceId,一个没有。我希望带有 sourceId 的数组项被索引,而没有被忽略的数组项。
这样做的正确方法是什么?如果过滤器必须是文档范围的,是否有任何方法可以指定在任何引用缺少 sourceId 时忽略文档?目前 mongo 不接受部分索引过滤器的运算符中的逻辑否定。
postgresql - 时间戳与当前时间的部分索引
我有一个查询,我通过比较五个月前的插入时间戳来过滤行。
该字段不会更新,如果有帮助,我们可能会认为它是不可变的。
并且EXPLAIN ANALYZE VERBOSE
:
似乎 PostgreSQL 在字段上执行序列扫描,这增加了成本。
我是否有机会创建 B-tree 部分索引或其他任何东西来优化该查询?
java - 有时会使用唯一索引插入重复数据
我确实有一个partialFilterExpression
集合上的唯一索引,但有时会插入重复的数据。
索引创建
getIndicies
命令中的索引
重复的文件
MongoDb 版本:3.2.7,似乎也发生在 3.2.12
旁注:在转储和恢复集合时,duplicate key error
会抛出a
为什么有时可以插入重复数据以及如何避免这种情况?
更新
我创建了一个 MongoDb 问题https://jira.mongodb.org/browse/SERVER-28153
python - sqlalchemy 的通用部分索引支持
根据这个问题,SQLAlchemy - 用于测试的 SQLite 和用于开发的 Postgresql - 如何移植?
我意识到,(以上)共识是不要使用未在生产中使用的数据库进行测试。
我想抽象对sqlalchemy的部分索引支持,这样我就可以使用 Postgres 或 Sqlite。
我已经看到了,PostgreSQL
我可以使用
但我看到https://sqlite.org/partialindex.html也支持部分索引sqlite
是否有某种对sqlalchemy的通用部分索引支持,我的模块可以用于 postgres 或 sqlite 数据库?
postgresql - 简单的 WHERE EXISTS ... ORDER BY ... PostrgeSQL 中的查询非常慢
我有这个非常简单的查询,由我的 ORM(实体框架核心)生成:
- 有 2 个“is_active”记录。其他涉及的列(“id”)是主键。查询正好返回 4 行。
- 表 1 是 9600 万条记录。
- 表 2 是 3000 万条记录。
- 此查询中涉及的 3 列已编入索引(is_active、id、table2_id)。
- 生成这个简单查询的 C#/LINQ 代码是:Table2.Where(t => t.IsActive).Include(t => t.Table1).ToList();`
SET STATISTICS 10000
设置为所有 3 列。VACUUM FULL ANALYZE
在两张桌子上运行。
如果没有该ORDER BY
子句,查询会在几毫秒内返回,我不希望返回 4 条记录。解释输出:
WITHORDER BY
子句,查询需要5分钟完成!解释输出:
内部的第一个索引扫描应返回不超过 2 行。然后外部的第二个索引扫描没有任何意义,因为它的成本为 4563070 和 103961040 行。它只需要匹配 2 行table2
和 4 行table1
!
这是一个非常简单的查询,返回的记录很少。为什么 Postgres 无法正确执行它?
postgresql - 在 Postgresql 中执行 upsert 时,在 ON CONFLICT 子句中未使用部分索引
我有以下实体属性值表:
此表中的示例条目是:
因此,在任何时间点,对于任何给定的键,应该只存在 1 个真正的 is_active 条目。
我在此表上运行以下 upsert 语句:
但是,它失败了:
我想知道为什么它不使用唯一的部分索引key_value_pair_key_if_is_active_true_unique。
如果我在任何时间点放开“ ,对于任何给定的键,应该只存在 1 个真正的 is_active 条目”子句并将索引更改为:
我在 Postgres 网站上阅读了 ON CONFLICT 子句将使用部分索引的文档。我想知道为什么在这种情况下不使用它。我在这里错过了什么,或者我犯了什么错误?
mongodb - MongoDB 计算部分索引项
我在一个看起来像这样的集合上有一个部分索引:
我只想计算已被此部分索引索引的项目数,以检查它是否正常工作。有没有办法做到这一点?还是有另一种好方法来检查部分索引对所有内容的索引?
arrays - 嵌套数组中的部分唯一索引
我的文件是这样的:
a.u
如果它存在,我想创建唯一索引:
文档将按如下方式编入索引:
问题来了a.u
,两条记录都有一个,所以部分过滤器表达式匹配两条记录。a.u
但两者在数组中也有一个空元素,null
因此我得到了重复键的错误null
。
有什么办法可以解决这个问题吗?或者我必须更改架构?
mongodb - 高效查询具有异构模式的 MongoDB 集合
我正在使用 NodeJS、MongoDB 和 Mongoose 开发一个 Web 应用程序。它旨在充当用户和大数据环境之间的接口。这个想法是用户可以在一个单独的集群中执行大数据过程,并将结果存储在一个 MongoDB 集合Results
中。此集合可为每位用户存储超过 100 万份文档。
此集合的文档架构在用户之间可能完全不同。例如,我们有user1
和user2
。和Results
集合中的文档示例:user1
user2
我在 Web 应用程序中实现了一个搜索引擎,以便每个用户都可以根据他们的文档模式在字段中进行过滤(例如,user1
我必须能够通过inputFields.variable1
和user2
by进行过滤outputFields.cost
)。当然我知道我必须使用索引,否则查询会很慢。
我的第一次尝试是为Results
集合中的每个不同字段创建一个索引,但是效率很低,因为由于索引的大小,数据库服务器变得不稳定。所以我的第二次尝试是尝试通过使用部分索引来减少索引的数量,以便我在选项中创建指定用户 ID 的索引partialFilterExpression
。
问题是,如果另一个用户在Results
集合中与任何其他用户具有相同的架构,并且我尝试为该用户创建索引,MongoDB 会抛出此异常:
Index with pattern: { inputFields.country: 1 } already exists with different options
发生这种情况是因为部分索引无法索引相同的字段,即使它们partialFilterExpression
不同。
所以我的问题是:我怎样才能让用户在这个环境中有效地查询他们的结果?MongoDB真的适合这个用例吗?
谢谢