Cassandra文档指出,
在以下情况下不要使用索引:
- 在高基数列上,因为您随后查询了大量记录以获取少量结果。请参阅下面的使用高基数列索引的问题。
继续
如果在高基数列上创建索引,该索引具有许多不同的值,则字段之间的查询将导致许多查找,结果很少。在拥有十亿首歌曲的表中,按作者(通常是每首歌曲唯一的值)而不是按艺术家查找歌曲的效率很低。手动将表维护为索引形式而不是使用Cassandra内置索引可能会更有效。对于包含唯一数据的列,有时为了方便起见,最好使用索引,只要对具有索引列的表的查询量适中且不在恒定负载下即可。
但是从来没有真正回答这个问题:为什么效率低下?我不知道“手动将表作为索引的一种形式”是什么意思。但是,这却与“………有时为了方便起见,只要查询量适中,使用索引有时是很好的性能……”。
这是否只是在告诉我在何时何地可以使用PK?什么是效率低下?我的理解是,要查询索引的查询将需要查询集群中的每个¹节点,然后每个节点都将在其本地索引中进行查找,然后将结果汇总。除了我们要付出网络等待时间之外,这并不一定是昂贵的(每个索引查找都应该相当便宜),因为我们必须等待最慢的节点。我在这里想念什么吗?
但是,如果我有一个包含不计其数的项目的收藏集,那么在极少数情况下,需要通过一个不同但几乎独特的属性来查找……这是一种适当的用法,对吗?
¹每个?IDK,如果复制意味着复制因子为3时,它可以达到群集的1/3?