Cassandra 文档

版本

您正在查看预发布版本的文档。

何时使用索引

内置索引最适合具有许多包含索引值的行的表。在特定列中存在的唯一值越多,查询和维护索引所需的平均开销就越大。例如,假设您有一个包含十亿条自行车手在数百场比赛中的记录的比赛表,并且想要按自行车手查找排名。许多自行车手的排名将在比赛年份的列值中共享。race_year 列是索引的良好候选者。

如果需要辅助索引,基于除分区键以外的一个或多个表列,请使用存储附加索引 (SAI)。有关详细信息,请参阅 CREATE CUSTOM INDEX

何时使用索引

在以下情况下不要使用索引

使用高基数列索引的问题

如果您在高基数列上创建索引,该列具有许多不同的值,那么字段之间的查询会产生许多查找,而结果却很少。在包含十亿首歌曲的表中,按作者(通常每首歌曲都是唯一的)而不是按其录制艺术家查找歌曲可能会非常低效。

手动维护表作为索引形式可能比使用内置索引更有效。对于包含唯一数据的列,有时为了性能,最好使用索引以方便起见,只要对具有索引列的表的查询量适中,并且不在持续负载下即可。

相反,在极低基数列(例如布尔列)上创建索引没有意义。索引中的每个值都会在索引中成为一行,例如,对于所有 false 值,会导致一个巨大的行。索引具有 foo = true 和 foo = false 的大量索引列没有用。

在频繁更新或删除的列上使用索引的问题

数据库在索引中存储墓碑,直到墓碑限制达到 100K 个单元格。超过墓碑限制后,使用索引值的查询将失败。

使用索引查找大型分区中的行的问题,除非查询范围很窄

对大型集群中索引列的查询通常需要整理来自多个数据分区的响应。随着更多机器添加到集群中,查询响应会变慢。在查找大型分区中的行时,请缩小搜索范围以避免查询性能下降。