问题标签 [compound-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 投票
2 回答
2733 浏览

database - MongoDB 复合索引 - 排序顺序重要吗?

我最近为我的一个项目潜入了 mongodb。我一直在阅读索引,对于一个小集合,我知道这并不重要,但是当它增长时,如果没有正确的索引和查询,就会出现性能问题。

可以说我有这样的收藏

我必须在哪里搜索我的收藏

在这个集合中,slug 对用户 ID 来说是唯一的。也就是说,用户 id 1 只能拥有一个值为“one-slug”的 slug。

我知道 user_id 由于它的高基数应该被优先考虑,但是 slug 呢?因为它在大多数时候也是独一无二的。我也无法围绕升序和降序索引,或者在这种情况下它将如何影响性能或我应该在这个集合中使用的正确顺序。

我读了一点,但我无法理解它,特别是对于我的场景。听到别人的声音会很棒。

0 投票
2 回答
57 浏览

mysql - 多列上的多个索引

假设我有一个大小合适的 MySQL 表(我们将称之为departments),其中包含一堆聚集在一起的列,如下所示:

部门表:

因此,就列而言,我们有“设置”和“报告”。查询此表时,它通常会查找给定“可查询”ID 和类型的所有设置或报告。

因此,对该表的大多数查询最终会看起来像这样:

为什么问题是,索引该表的正确方法是什么?包含包含所有“设置”和所有“报告”的索引是否具有设计意义,例如:

...或者这是对复合索引应该如何工作的误解?

0 投票
0 回答
430 浏览

sharepoint-online - Sharepoint Online:即使使用支持的列类型也无法创建复合索引

我正在尝试在 Sharepoint Online 中为当前包含 26k 个项目的列表创建一个复合索引。我希望使用的列(类型和除法)都具有以下设置:

  1. 环境
    1. 类型 = 选择
    2. 要求此列包含信息 = 是
    3. 使用下拉菜单显示选项
    4. 不允许“填写”选项
    5. 默认值 = 选择,但未输入任何内容
    6. 无列验证

我希望使用的第一列 (Type) 没有任何空值 - 即所有项目都有一个值。选择此列作为我的主列时,辅助列字段变得不可访问(灰显)。

诚然,我确实有一个使用同一列(类型)的现有简单索引 - 我还没有删除这个索引,因为我已经在许多其他地方使用了这个简单索引。我还没有读到任何内容说我不能让一列参与多个索引,因此更愿意保留简单索引。

Sharepoint 支持的索引列

0 投票
2 回答
94 浏览

mysql - 什么是复合索引以及如何正确使用它?

我有一个非常慢的查询,它会重复很多次。我试过索引各个字段,但似乎没有帮助。CPU使用率仍然很高,查询仍然出现在慢查询日志中。看来我需要一个复合索引?

如何正确索引以下查询?

解释结果: 1 SIMPLE to_attachments index NULL PRIMARY 775 NULL 244384 Using where; Using index; Using temporary; Using filesort 1 SIMPLE attachments eq_ref PRIMARY PRIMARY 4 quote.to_attachments.attachment_id 1 NULL

to_attachments 的索引 在此处输入图像描述

0 投票
1 回答
31 浏览

sql - 给定列列表的 Postgres 复合索引有效性

假设我有一个涉及这 3 列的复合索引。

该索引是否仍将用于这些查询?第一个查询仅涉及 2 个索引字段,第二个索引使用的字段多于所有字段。顺便问一下,哪种索引类型最适合这个?

0 投票
1 回答
372 浏览

mongodb - FeathersJS 为集合创建复合索引

FeathersJS 服务有没有办法为 MongoDB 数据库创建复合索引?

0 投票
1 回答
65 浏览

mongodb - 用于对 BIG 集合进行过滤和排序的 Mongodb 复合索引

有人可以告诉我,在这种情况下是否可以使 Mongodb 中的索引更有效:我有一个包含 5000 万个项目的数据库。“ico”和“publishDate”字段有两个索引。Ico 用于过滤,publishDate 用于排序。是否有可能让它像一个复合索引一样更有效率?我可以在复合索引中结合过滤和排序吗?选择哪个应该是索引定义中的第一个重要吗?这有点复杂,因为我没有本地主机上的集合。

0 投票
1 回答
395 浏览

mongodb - MongoDB和部分索引:在空日期过滤时避免过滤阶段

我正在尽我所能优化数据库查找。据我了解,我的目标应该是针对唯一阶段是 IXScan 的获胜计划。但是我有一个包含日期键的字段,似乎我无法构建一个复合索引,在过滤“空”日期值时能够直接查找文档。

我的过滤器查询如下

我尝试构建一个与该查询完全对应的部分索引(为了也节省一些索引内存,因为我知道我永远不必显示例如软删除的文档)

(请注意,代码是用 Ruby 编写的,但使用 Mongoid 可以毫无问题地转换为 MongoDB 语言)

除了过滤器之外,这似乎运作良好soft_deleted_at,因为我的获胜计划看起来像

所以在这里我有这个额外的阶段"stage"=>"FETCH", "filter"=>{"soft_deleted_at"=>{"$eq"=>nil}},,它基本上是手动过滤我的日期字段的空值。我希望这已经在部分索引中并且不需要更多过滤......我错了吗?

有什么办法可以避免这个额外的过滤阶段?

0 投票
0 回答
231 浏览

mongodb - 如何有效地在具有多个范围的单个字段上查询 Mongodb?

我正在尝试使用 MongoDB 的 B-tree 索引构建自定义地理空间索引,因为我发现 Mongo 的本机实现限制了我自己的情况。为了完成使用复合索引有效搜索 Mongo 的地理空间查询,我需要按location.locIndexKey具有多个范围的字段以及其他字段进行过滤。

到目前为止,我能想出的支持这种查询的唯一解决方案是使用 Mongo 的$or运算符。然而,这表现得很糟糕,因为它是一个or查询,Mongo 必须一次又一次地检查索引上的相同键。为了克服这种低效率,我需要一种方法让 Mongo 在该字段上使用多个索引边界,而不是使用or短语为查询中定义的每个边界复制查询。

这是我的查询:

如您所见,为了在 field 上表达多个范围location.locIndexKey,我不得不使用$or运算符。这是查询计划器执行统计信息的缩短版本:

如果您indexBounds在上面进行检查,您将看到每个范围 forlocation.locIndexKey都应用于单个查询并与or. 但是,如果我选择使用 Mongo 的本地地理空间运算符运行相同的查询$geoWithin

我从查询规划器得到以下响应:

如您所见,Mongo 利用多个索引边界来完成此查询,并且更加有效。

我相信原始查询效率低下的原因是 Mongo 的查询计划器不检查$or表达式中的内容。我认为理解表达式中只有一个具有多个范围的字段并使用多个索引边界构建查询应该更聪明。可悲的是,事实并非如此。

我的问题:有什么方法可以强制 Mongo 为我的查询使用多个索引范围,以便它与本机地理空间查询一样高效?

任何帮助,将不胜感激。

谢谢!

0 投票
1 回答
24 浏览

mongodb - MongoDB 复合索引未与查询一起使用

嗨,有人可以解释一下如何为这个简单的查询制作复合索引吗?

我做了两个复合索引:

  1. 用户 ID:1 + 结束:1
  2. 用户 ID:1 + 结束:-1

但查询不使用其中任何一个。这个索引有什么问题?

这是explain()的结果

这是文档示例:

谢谢。

PS:此 PS 文本仅适用于 Stackoverflow 编辑器错误。