问题标签 [secondary-indexes]

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 回答
116 浏览

mysql - “使用索引”和复合索引:A=, B=, C<=

尽管查询很简单,但下面的执行计划似乎令人失望和次优。

我正在使用 MySQL 5.7。这是小提琴(虽然它只提供 5.6)。

我们将使用Name-IsSequenced二级索引。让我们尝试以下EXPLAIN. (查询在小提琴中。打开“查看执行计划”以查看其EXPLAIN结果。)

到目前为止,一切都很好。Using index condition有道理:整个条件可以在预期的索引上解决Name-IsSequenced,然后需要PK来获取剩余的数据SELECT *

Using index如果我们只选择二级索引的一部分,我们应该能够改进它,对吧?(请注意,PK 始终是任何二级索引的一部分,但我们甚至可以通过id在二级索引的末尾添加来确保这一点。结果应该是一样的。)

现在,结果是Using where; Using index。等等,这……更糟?!我们减少了它的工作量,而计划表明它正在更加努力地工作。

Using index应该是可以实现的。找到范围 where name=OrderCreated,然后在其中找到子范围 where is_sequenced=0,然后在里面找到子范围 where id<=3

奇怪的是,我还有其他实验(有更多数据),我可以Using index通过更改id<=3来获得id=3(结合FORCE INDEX以防止它更喜欢 PK)。我看不出差异的原因。(如果我们用 Fiddle 试试这个,它保持不变 - 可能是因为数据集小。)

谁能解释为什么执行计划没有表明二级索引的预期有效使用?有没有办法把它弄直?

0 投票
3 回答
6738 浏览

indexing - 在 Clickhouse 中的现有表上创建索引

我正在尝试使用以下语法在现有表上添加索引。

创建表contact_in.....(.......域字符串,主题字符串,类别字符串........................)ENGINE = MergeTree PARTITION BY category ORDER BY (topic, domain) 设置 index_granularity = 8192

有人可以快速帮助我吗?

0 投票
1 回答
533 浏览

python - Python 中的二级内存索引表示

我正在寻找一种有效的解决方案,使用 numpy 和 arrow 等高级优化数学包在 Python 中构建二级内存索引。出于性能原因,我不包括熊猫。

定义

“二级索引包含要索引的属性的每个现有值的条目。这个条目可以看作是一个键/值对,属性值为键,值是指向基表中所有记录的指针列表有这个价值。” -合资企业。德席尔瓦等人。(2017)

让我们举一个简单的例子,我们可以稍后对其进行扩展以产生一些基准:

有趣的是pyarrow.Array.dictionary_encode方法可以将值数组转换为接近二级索引的字典编码表示。

我在这里打开了一个问题

因此,问题在于您可以多快地使用 Python 数据结构在内存中构建二级索引以有效地保存值和索引。但这只是故事的一半,因为如果索引能够很好地服务于过滤查询(点、范围)和转换——在TRIADB中重建行、列和关联(也称为超边),它就会很有用。甚至这里的快速描述也没有涵盖更新这种索引有多么容易。

出于多种原因,我开始研究可能的 PyArrow 开源解决方案。排序后的字典编码表示通常应该满足问题的要求,并结合了更小的内存占用和更快/灵活的零拷贝 I/O 处理。

0 投票
1 回答
640 浏览

amazon-dynamodb - 如果内部没有属性更改,DynamoDB 二级索引是否会被重写?

在 AWS 文档中:

每当在表上发生写入时,都必须更新表的所有索引。在具有大型表的大量写入环境中,这会消耗大量系统资源。在只读或以只读为主的环境中,这不是一个大问题。但是,您应该确保您的应用程序实际使用了索引,而不是简单地占用空间。

https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/SQLtoNoSQL.Indexes.html

但是,如果我正在创建一个全局二级索引,并且该索引的属性没有发生任何更改,它会导致重写吗?

例如,假设我有下表:

关键字(哈希)| 电话号码(范围)| 属性 1...N | 帐户ID

KEYWORDPHONE NUMBER并且ACCOUNT ID不会更改(但可能会删除整个项目)。

还有一个全局二级索引:

帐户 ID(哈希)| 电话号码(范围)| 关键词

用例是我需要在第一个表中找到所有具有相同ACCOUNT IDPHONE NUMBER. 然后我将需要该KEYWORD属性。但是,这不需要经常发生。全局二级索引中的任何属性在任何时候都不会更改原始表中的任何属性。

文档不清楚(对我来说)。我假设如果ACCOUNT ID,PHONE NUMBER并且KEYWORD不更改(但其他属性可能),则全局二级索引将不会写入。(但如果原始表项被删除,它将导致重写)。

0 投票
1 回答
134 浏览

java - 是否建议使用 aerospike 在某些字段上进行过滤

我有大约 200 万条记录,每条记录有 10-12 个字段(大部分是字符串)。现在我想根据某些字段过滤记录。是否建议使用二级索引或其他更好的选项来执行此操作?另外,获取所有记录/仅键(在应用过滤器之后)需要多长时间?

提前致谢。

0 投票
0 回答
119 浏览

indexing - N1QL 查询即使在使用 couchbase 二级索引创建的缺少谓词的情况下也能正常工作

我在 couchbase 中创建了一个二级索引:

CREATE INDEX `data` ON `bucket`(`field1`,`field2`,`field3`, lower(`field4`)) WHERE (`field5` = "CONSTANT")

当我在 couchbase 上执行此查询时:

即使没有给出主要谓词之一(field2)的值,查询似乎仍然可以正常工作。谁能解释为什么?

这是在查询前添加“EXPLAIN”时返回的查询计划:

0 投票
1 回答
725 浏览

cassandra - 为什么二级索引在 Cassandra 中效率较低?

我在 Cassandra 文档中读到,创建二级索引的效率较低,因为在最坏的情况下,它需要接触所有节点才能找出该非键列的数据。

但我的疑问是,即使我们不创建二级索引,它也必须接触所有节点(在最坏的情况下)并找出具有此非键列值的特定行所在的位置。

注意:是的,我知道如果基数很高,那么二级索引可能会包含(存储)大多数行的索引,这样就存储而言很糟糕。但是我想知道不创建二级索引比创建二级索引效率如何?

0 投票
0 回答
193 浏览

sql-server - 根据 EF Core 中的二级索引获取数据

如果我为我的表定义了二级索引(非聚集),我想了解如何在 EF Core 中有效地检索数据。

我希望能够基于二级索引对单个元素进行有效查找:

0 投票
2 回答
93 浏览

mysql - MySQL - 使用二级索引列获取数据时的结果顺序保证

如果我有一个在辅助列上有索引的表,使用辅助列获取数据是否能保证结果始终保持一致的顺序?

例如,假设我有一个表 T,其中包含列 PKColumn、ColumnA、ColumnB、ColumnC....

以及 ColumnA 上的索引,例如在 ASC 中

查询是否select * from T where ColumnA = '<some-value>'保证始终以相同的顺序返回结果(基于在 ColumnA 上创建的索引的排序方向?)

0 投票
2 回答
1136 浏览

redis - 如何在 Redis 缓存中使用多键或二级索引?

我需要在 Redis 缓存中使用两个键值,以便我可以基于一个键进行检索?请帮助解决这个问题,

两个键都是字符串,值是一个实体,其中键值也将出现。

例子:

: <compressed_json>

json结构:

我需要通过使用键或'b'从redis获取价值,但我不会同时拥有这两个值。